Javascript 文本响应需要双JSON.parse()的实例

Javascript 文本响应需要双JSON.parse()的实例,javascript,json,Javascript,Json,这与其说是个问题,不如说是我找到的解决方案,我不知道它是如何工作的。我正在进行一个fetch调用,并收到一个文本响应,我需要将其转换为可使用的JSON "[{\"Rank\":1,\"FISHERMAN_PHONENAME\":\"James Elam\"...}]" 一个JSON.parse去掉了结尾的双引号和斜杠,但它仍然不能作为我需要的JSON对象数组返回,因此我最终做了以下工作: if (response.ok) { const payload = await response.t

这与其说是个问题,不如说是我找到的解决方案,我不知道它是如何工作的。我正在进行一个
fetch
调用,并收到一个文本响应,我需要将其转换为可使用的JSON

"[{\"Rank\":1,\"FISHERMAN_PHONENAME\":\"James Elam\"...}]"
一个
JSON.parse
去掉了结尾的双引号和斜杠,但它仍然不能作为我需要的JSON对象数组返回,因此我最终做了以下工作:

if (response.ok) {
  const payload = await response.text();
  data = JSON.parse(JSON.parse(payload));
}
这确实起到了作用,但我不知道为什么它需要双重解析才能实现。任何洞察都会很棒

我不知道为什么它需要双重解析才能实现

因为数据被双重编码为JSON。JSON应该是简单的

{"Rank":1,"FISHERMAN_PHONENAME":"James Elam"...}

"[{\"Rank\":1,\"FISHERMAN_PHONENAME\":\"James Elam\"...}]"
也是有效的JSON,在本例中是包含其他JSON数据的(JSON)字符串

下面是一个演示双重编码的简单示例:

console.log('Once',JSON.stringify({foo:42}));
log('tweeps',JSON.stringify(JSON.stringify({foo:42}))
我不知道为什么它需要双重解析才能实现

因为数据被双重编码为JSON。JSON应该是简单的

{"Rank":1,"FISHERMAN_PHONENAME":"James Elam"...}

"[{\"Rank\":1,\"FISHERMAN_PHONENAME\":\"James Elam\"...}]"
也是有效的JSON,在本例中是包含其他JSON数据的(JSON)字符串

下面是一个演示双重编码的简单示例:

console.log('Once',JSON.stringify({foo:42}));

log('tweeps',JSON.stringify(JSON.stringify({foo:42}))如果你去掉了前导和尾随的双引号,那么你所拥有的就是
[{\'Rank\':1,\'FISHERMAN\'u PHONENAME\':\'James Elam\'。…}]
,有一个
JSON.parse
能奏效吗?@Snake14:
\“
在该位置不是JSON中的有效字符序列。@FelixKling调用正确。我想转义内部双引号是个问题。如果你去掉前导双引号和尾随双引号,那么你所拥有的就是
[{“Rank\”:1,“FISHERMAN\u PHONENAME\:“James Elam\”…}]
,一个
JSON.parse
就可以了吗?@Snake14:
\“
在该位置不是JSON中的有效字符序列。@FelixKling调用正确。我想内部双引号转义将是一个问题。