$var_data_running .= ",\[\"$row_array[0] \($row_array[2]\)\",$row_array[2]\]"; #### my $orun=join(',',@iarray_run); print "var data_run=[$orun];\n"; #### use strict; use warnings; use DBI; my $storagefile='finddata'; my $DBH = DBI->connect( "dbi:SQLite:dbname=".$storagefile ) || die "Cannot connect: $storagefile $DBI::errstr"; my $sql = 'SELECT queue_name,jobs_pend,jobs_run FROM queues ORDER BY jobs_run DESC'; my $sth = $DBH->prepare( $sql ); $sth->execute(); # input my %table = (); my $recno = 0; my @top = (); while (my ($name,$pend,$run) = $sth->fetchrow_array){ my $key = ($recno++ < 5) ? $name : 'other' ; push @top,$key unless (defined ($top[-1]) && $top[-1] eq 'other'); $table{$key}{'pend'} += $pend; $table{$key}{'run'} += $run; } #So first you need to make your interior arrays my @iarray_run; for my $key (@top){ push @iarray_run,'["'.$key.'",'.$table{$key}{'run'}.']'; } # then you join them and assign them my $orun=join(',',@iarray_run); print "var data_run=[$orun];\n"; my $orun2=join('',@iarray_run); print "wrong-var data_run=[$orun2];\n"; print "\n"; use JSON 'decode_json'; my $frjson_data_run = decode_json( "[$orun2]" ); #### var data_run=[["adice_short",192],["ncsim_short",84],["ncsim_long",78],["adice_long",39],["normal",30],["other",34]]; wrong-var data_run=[["adice_short",192]["ncsim_short",84]["ncsim_long",78]["adice_long",39]["normal",30]["other",34]]; , or ] expected while parsing array, at character offset 21 (before ""ncsim_short",84]["n...") at 1187071a.pl line 38. #### var data_run = [["adice_short (192)","192"],["ncsim_short (84)","84"],["ncsim_long (78)","78"],["adice_long (39)","39"],["normal (30)","30"],["other (34)","34"]]