【发布时间】:2019-07-30 22:27:33
【问题描述】:
我将此数据作为 JSON 对象的字符串保存到文件格式的 UTF-8 中。
我想从中创建一个对象数组并根据其中包含的键对其进行查询。
这是数据:
{
"Number": "C",
"Is": true,
"ImageKey": "06",
"image": "/9j/4AAQSkZJRgABAAEAlgCWAAD//gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/"
}{
"Number": "A",
"photoNot": false,
"ImageKey": "61",
"image": "/9j/4AAQSkZJRgABAAEAlgCWAAD//gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/"
}{
"Number": "L",
"photoIs": false,
"ImageKey": "99",
"image": "/9j/4AAQSkZJRgABAAEAlgCWAAD//gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/"
}
这是我尝试过的:
const stringFile = fs.readFileSync('./test.json', 'utf-8')
const res = JSON.stringify(stringFile);
for (const json in stringFile) {
console.log(JSON.parse(JSON.stringify(json)));
console.log(`Driver number of record is ${jsonData.ImageKey}`);
}
预期结果:ImageKey 的值
错误: 位置 176 处的 JSON 中的意外标记 在 JSON.parse() 处
注意!第二个花括号在 VS 中带有红色下划线,消息:EOF。 json(0).
如何用代码解决这个问题?
【问题讨论】:
-
Idea: 因为这是一个 JSON 字符串,有多个对象 str={object1}{object2}{object3},我们可以考虑 '{object' = x ; '{}' = y ;找到位置 y; json.parse(str)=substring(str, x, x-y); x+1;
-
您显示的不是 JSON 字符串。这是三个背靠背的 JSON 字符串,所以:不要那样做,通过在其周围放置
[]使其成为真正的 JSON 字符串,它们之间用逗号分隔,然后告诉节点用const yourdata = require('./yourfile.json')加载它,因为Node 可以原生读取 json 并正常处理生成的对象数组。 -
你拥有的是concatenated JSON。您需要使用像 concatjson 或 json-streaming-reader 这样的模块来安全地解析它。 (任何告诉您使用
replace或类似天真的方法将其“转换”为纯 JSON 的任何答案都是不正确的,并且会在许多边缘情况下失败。) -
或者产生
test.json的进程应该被修复以生成有效的JSON
标签: node.js json string parsing