javascript - NodeJs JSON 解析问题

标签 javascript json node.js npm

我有一个 .json 文件,其中存储了人名。我正在使用 Node 管理器的文件系统读取此文件的内容,然后尝试将此 json 转换为字符串并将其解析为 JS 对象。将其解析为 JS 对象后,我得到的是字符串类型而不是对象。 这是示例 json 文件:

{
"21154535154122752": {
    "username": "Stanislav",
    "discriminator": "0001",
    "id": "21154535154122752",
    "avatar": "043bc3d9f7c2655ea2e3bf029b19fa5f",
    "shared_servers": [
        "Reactiflux",
        "Discord Testers",
        "Official Fortnite",
        "Discord API"
    ]
    }
}

这是处理数据的代码:

const string_data = JSON.stringify(fs.readFileSync('data/users.json', 'utf8'));
const data = JSON.parse(string_data);
console.log(typeof(data)); // <-- this line here shows the type of data as string
const results_array   = Object.values(data);

其中 fs 是来自 npm 的文件系统包。

最佳答案

不要使用 JSON.stringify,因为它会进一步改变 JSON 对象的字符串表示形式。下面是正在发生的事情的一个例子

想象一下,如果您的文件中有如下所示的数据

{
   "key": "value"
}

当您读取文件(使用 readFileSync)并应用 JSON.stringify 时,它会转换为如下所示的新字符串。您会注意到双引号现在被转义了

"{\"key\": \"value\"}"

现在,当您使用 JSON.parse 解析它时,您将返回从文件中读取的相同字符串,而不是获取所需的 object

基本上是先执行再撤销stringify操作

关于javascript - NodeJs JSON 解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49720767/

相关文章:

c++ - 对 Boost JSON 解析器的调用永远不会返回

javascript - 销毁 JWT token ,当用户被禁止或编辑时强制注销

javascript - Browserify - 捆绑加载,但之后不起作用

javascript - Linux 操作系统上的 ibm_db 模块安装问题

javascript - 使用没有 ID 的 Javascript 选择单选按钮

javascript - 在 JavaScript 中循环数组时忽略空字符串

json - 如何在 ARM 模板的标签对象类型中使用 utcNow()

PHP - 使用 json 将数据表单发布到 Google 文档

node.js - 为什么 jsonwebtoken 会抛出 "invalid signature"错误?

javascript - Electron、React 和 Webpack,如何让 HMR 发挥作用?