需要Double JSON.parse()进行文本响应的实例

时间:2018-11-16 00:51:03

标签: javascript json

这并不是我发现的解决方案的问题,也不知道它是如何工作的。我正在进行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));
}

做到了这一点,但我不知道为什么它需要双重解析才能实现。任何见解都会很棒。

1 个答案:

答案 0 :(得分:2)

  

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

因为数据被双重编码为​​JSON。 JSON就是

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

"[{\"Rank\":1,\"FISHERMAN_PHONENAME\":\"James Elam\"...}]"

也是有效的JSON,在这种情况下,它是包含其他JSON数据的(JSON)字符串。

这是一个简单的示例,演示了双重编码:

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

请注意第一个不包含前导和尾随引号。


您应该修复生成JSON的过程,使其仅编码一次。