如何使用 node.js 解析带有转义双引号的 JSON?

How to parse JSON with escaped doublequotes, using node.js?

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

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

又来了,格式更易读:

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

注意上面 keyvalue 周围的双引号被转义了。这是必要的,并且是有效的 JSON(在 jsonlint.com 处检查)。

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

我的 node.js 代码哪里做错了?

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

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

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

因为那部分数据是 JSON-within-JSON,你要解析 JSON,然后解析 [=13] 上的 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>