Search code examples
javascriptsqljsonarray-agg

Javascript - Unable to read json key values - Unexpected token i in JSON at position 1 - sql query output problem


I'ved got this string generated from sql query (basically using ARRAY_AGG and some cases to format the output) that looks like this

{id:2,name_of_division:'super department1',attendance_radius:1000}

However, in javascript, I cant get any of the key values and its also causing JSON parse error. I'ved tried validating this JSON and it looks perfectly fine.

Here are some of the troubleshooting, I have no idea what is causing it

console.log(clean_div_array_var[i].toString());
output ==> {id:2,name_of_division:'super department1',attendance_radius:1000}

console.log("id:" + clean_div_array_var[i].id);
output ==> id:undefined

console.log("name_of_division:" + clean_div_array_var[i].name_of_division);
output ==> name_of_division:undefined


JSON.parse(clean_div_array_var[i]);
output ==>
VM2561:1 Uncaught SyntaxError: Unexpected token i in JSON at position 1
    at JSON.parse (<anonymous>)
    at get_all_key_of_div_array ((index):817)
    at render ((index):2321)
    at jquery.dataTables.min.js:18
    at Object.b.fnGetData (jquery.dataTables.min.js:12)
    at B (jquery.dataTables.min.js:17)
    at Ha (jquery.dataTables.min.js:25)
    at O (jquery.dataTables.min.js:16)
    at jquery.dataTables.min.js:49
    at i (jquery.dataTables.min.js:35)
 

I even try to stringify, then somehow remove quotes (I dont understand why this even appears) and then JSON parse. Same problem.

stringifyvar = JSON.stringify(clean_div_array_var[i])
output ==> "{id:2,name_of_division:'super department1',attendance_radius:1000}"

stringifyvar = stringifyvar.split('\"').join('');
console.log("stringify remove quote:" + stringifyvar);
output ==> stringify remove quote:{id:2,name_of_division:'super department1',attendance_radius:1000}

parsed_json_data = JSON.parse(stringifyvar);

output ==>
VM2503:1 Uncaught SyntaxError: Unexpected token i in JSON at position 1
    at JSON.parse (<anonymous>)
    at get_all_key_of_div_array ((index):816)
    at render ((index):2320)
    at jquery.dataTables.min.js:18
    at Object.b.fnGetData (jquery.dataTables.min.js:12)
    at B (jquery.dataTables.min.js:17)
    at Ha (jquery.dataTables.min.js:25)
    at O (jquery.dataTables.min.js:16)
    at jquery.dataTables.min.js:49
    at i (jquery.dataTables.min.js:35)

How can I read any of the keys properly from this json


Solution

  • Your result is not valid JSON. Valid format would be:

    {"id":2, "name_of_division":"super department1", "attendance_radius":1000}
    

    The keys have to be quoted, and the quotes around the string super department1 have to be double quotes, not singlequotes.

    You need to generate proper JSON if you want to be able to use JSON.parse() to process it.