Javascript - 无法读取 json 键值 - JSON 中位置 1 的意外令牌 i - sql 查询输出问题

Posted

技术标签:

【中文标题】Javascript - 无法读取 json 键值 - JSON 中位置 1 的意外令牌 i - sql 查询输出问题【英文标题】:Javascript - Unable to read json key values - Unexpected token i in JSON at position 1 - sql query output problem 【发布时间】:2021-09-04 06:59:42 【问题描述】:

我已经从 sql 查询中生成了这个字符串(基本上使用 ARRAY_AGG 和某些情况来格式化输出),看起来像这样

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

但是,在 javascript 中,我无法获取任何键值,并且它也会导致 JSON 解析错误。 我试过验证这个 JSON,它看起来非常好。

这里有一些故障排除,我不知道是什么原因造成的

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)
 

我什至尝试字符串化,然后以某种方式删除引号(我不明白为什么会出现这种情况),然后解析 JSON。同样的问题。

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)

如何从这个 json 中正确读取任何键

【问题讨论】:

JSON 要求对象键和字符串用双引号括起来。 所以这不是有效的 JSON。不要尝试手动创建 JSON,始终使用库函数来确保所有内容的格式正确。 【参考方案1】:

您的结果不是有效的 JSON。有效格式为:

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

键必须加引号,字符串super department1 周围的引号必须是双引号,而不是单引号。

如果您希望能够使用JSON.parse() 来处理它,您需要生成正确的 JSON。

【讨论】:

以上是关于Javascript - 无法读取 json 键值 - JSON 中位置 1 的意外令牌 i - sql 查询输出问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 hive/sql 和 spark 读取 json 键值

读取许多json文件以找到公共键值对python

读取json文件,并使用python打印键值

如何从 json 对象构建键值的 JavaScript 数组

在 Objective-C 中使用 JSON 数据的 NSJSONSerialization 读取 NSDictionary 集的键值

无法序列化 json 键值对