【问题标题】:How to parse JSON with escaped doublequotes, using node.js?如何使用 node.js 解析带有转义双引号的 JSON?
【发布时间】:2021-02-28 17:16:29
【问题描述】:

这是我正在使用的一些 JSON 的示例:

{"name":"John","attributes":"{\"key\":\"value\"}"}

又来了,格式更易读:

{
    "name": "John",
    "attributes": "{\"key\":\"value\"}"
}

请注意,keyvalue 周围的双引号已转义。这是必要的,并且是有效的 JSON(在 jsonlint.com 上查看)。

我正在尝试获取“名称”的值,但转义的双引号导致错误。

我在 node.js 代码中做错了什么?

var theString = '{"name":"John","attributes":"{\"key\":\"value\"}"}';
var theJSON = JSON.parse(theString);
var theName = theJSON.name;
console.log("name = " + theName);

下面是输出。错误发生在我的代码的第 2 行,我在其中“JSON.parse()”字符串。 JSON.parse 似乎正在删除反斜杠,将有效的 JSON 转换为无效的 JSON。

undefined:1
{"name":"John","attributes":"{"key":"value"}"}
                               ^
SyntaxError: Unexpected token k in JSON at position 31

【问题讨论】:

    标签: node.js json parsing escaping double-quotes


    【解决方案1】:

    由于这部​​分数据是 JSON-within-JSON,您需要解析 JSON,然后解析 attributes 属性上的 JSON:

    const obj = JSON.parse(json);
    obj.attributes = JSON.parse(obj.attributes);
    

    现场示例:

    const json = document.getElementById("json").textContent;
    
    const obj = JSON.parse(json);
    obj.attributes = JSON.parse(obj.attributes);
    console.log(obj);
    <pre id="json">{
        "name": "John",
        "attributes": "{\"key\":\"value\"}"
    }</pre>

    【讨论】:

    • T.J.,你能举一个不使用 document.getElementById("json").textContent 的例子吗?我正在调用一个 REST API,并得到一个字符串。这就是我必须解决的问题。
    • @metrangia - 在该示例中,json 是一个字符串,就好像您从其他 API 中获得它一样。 (这实际上就是我这样做的原因,所以我不必在字符串文字等中使用转义的反斜杠创建 JSON。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    相关资源
    最近更新 更多