一个远程服务器(我无法控制)发送一个JSON字符串,其中包含所有字段名和值转义。例如,当我执行JSON.stringify(res)时,结果如下:
"{\"orderId\":\"123\"}"
现在,当我执行alert(res.orderId)时,它显示undefined。我想是因为逃跑的人。我该怎么解决?
b1payxdu1#
假设 * 是 * 显示的实际值,那么考虑:
twice_json = '"{\\"orderId\\":\\"123\\"}"' // (ingore the extra slashes) json = JSON.parse(twice_json) // => '{"orderId":"123"}' obj = JSON.parse(json) // => {orderId: "123"} obj.orderId // => "123"
请注意如何将JSON.stringify应用于json值(它是一个 string,因为JSON * 是text*)将得到twice_json值。进一步考虑obj(一个 *JavaScript对象 *)和json(JSON * 字符串 *)之间的关系。也就是说,如果文章中显示的结果是JSON.stringify(res)的输出,那么res是 already JSON(即 text / a string)而 * 不是 * JavaScript对象-所以不要在一个已经有JSON值上调用stringify!相反,按照上面的演示/转换,使用obj = JSON.parse(res); obj.orderId。
json
twice_json
obj
JSON.stringify(res)
obj = JSON.parse(res); obj.orderId
hsvhsicv2#
公认的答案对我不起作用。我用
json = json.replace(/\\/g,""); let arrayObj = JSON.parse(json);
mnowg1ta3#
它实际上是一个对象,你可以在它上面执行JSON.stringufy。
var jsonString = "{\"orderId\":\"123\"}"; var jsonObject = JSON.parse(jsonString); console.log(jsonObject.orderId);
或者你做得更简单
var jsonObject = JSON.parse("{\"orderId\":\"123\"}"); console.log(jsonObject.orderId);
c90pui9n4#
建议的解决方案为问题中的特定问题提供了答案,但无法以通用的方式修复过度转义的JSON。以下是我提出的解决方案:
const veryEscapedJsonString = "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"potato\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"salad\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\"\\\"\"" function jsonParseUntilUnescaped(escapedJson) { const parsedJson = JSON.parse(escapedJson) const stringifiedParsedJson = parsedJson.toString(); if (stringifiedParsedJson.includes('\"')) { return jsonParseUntilUnescaped(stringifiedParsedJson ) } return parsedJson; } const json = jsonParseUntilUnescaped(veryEscapedJsonString); // { potato: 'salad' }
cotxawn75#
你可以使用JSON.parse,我真的不知道这个API会为你返回什么,所以我不能给予你其他选择。
var res = "{\"orderId\":\"123\"}"; res = JSON.parse(res); alert(res.orderId);
jei2mxaa6#
你真的需要字符化你的数据不能仅仅使用json.orderId吗?你说发送一个json字符串?如果你的json已经在string中,你不必做stringify。如果你有Chrome调试器或其他浏览器调试器,你可以看到你的var的类型。
6条答案
按热度按时间b1payxdu1#
假设 * 是 * 显示的实际值,那么考虑:
请注意如何将JSON.stringify应用于
json
值(它是一个 string,因为JSON * 是text*)将得到twice_json
值。进一步考虑obj
(一个 *JavaScript对象 *)和json
(JSON * 字符串 *)之间的关系。也就是说,如果文章中显示的结果是
JSON.stringify(res)
的输出,那么res是 already JSON(即 text / a string)而 * 不是 * JavaScript对象-所以不要在一个已经有JSON值上调用stringify!相反,按照上面的演示/转换,使用obj = JSON.parse(res); obj.orderId
。hsvhsicv2#
公认的答案对我不起作用。我用
mnowg1ta3#
它实际上是一个对象,你可以在它上面执行JSON.stringufy。
或者你做得更简单
c90pui9n4#
建议的解决方案为问题中的特定问题提供了答案,但无法以通用的方式修复过度转义的JSON。
以下是我提出的解决方案:
cotxawn75#
你可以使用JSON.parse,我真的不知道这个API会为你返回什么,所以我不能给予你其他选择。
jei2mxaa6#
你真的需要字符化你的数据不能仅仅使用json.orderId吗?你说发送一个json字符串?如果你的json已经在string中,你不必做stringify。如果你有Chrome调试器或其他浏览器调试器,你可以看到你的var的类型。