【问题标题】:UTF-8 JSON String parse with Node and make an array of objects使用 Node 解析 UTF-8 JSON 字符串并创建一个对象数组
【发布时间】: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。您需要使用像 concatjsonjson-streaming-reader 这样的模块来安全地解析它。 (任何告诉您使用replace 或类似天真的方法将其“转换”为纯 JSON 的任何答案都是不正确的,并且会在许多边缘情况下失败。)
  • 或者产生test.json的进程应该被修复以生成有效的JSON

标签: node.js json string parsing


【解决方案1】:

为什么不直接将 JSON 作为普通的旧 JS 对象导入?

const data = require('./test.json');

for (const d of data) {

    console.log(d);

    console.log(`Driver number of record is ${d.ImageKey}`);
}

【讨论】:

  • 感谢您的关注。您是否测试过您在此处发布的代码?
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
相关资源
最近更新 更多