如何修复转义的JSON字符串(JavaScript)

bn31dyow  于 2023-06-25  发布在  Java
关注(0)|答案(6)|浏览(197)

一个远程服务器(我无法控制)发送一个JSON字符串,其中包含所有字段名和值转义。例如,当我执行JSON.stringify(res)时,结果如下:

"{\"orderId\":\"123\"}"

现在,当我执行alert(res.orderId)时,它显示undefined。我想是因为逃跑的人。我该怎么解决?

b1payxdu

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

hsvhsicv

hsvhsicv2#

公认的答案对我不起作用。我用

json = json.replace(/\\/g,"");
let arrayObj = JSON.parse(json);
mnowg1ta

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);
c90pui9n

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' }
cotxawn7

cotxawn75#

你可以使用JSON.parse,我真的不知道这个API会为你返回什么,所以我不能给予你其他选择。

var res = "{\"orderId\":\"123\"}";
res = JSON.parse(res);
alert(res.orderId);
jei2mxaa

jei2mxaa6#

你真的需要字符化你的数据不能仅仅使用json.orderId吗?你说发送一个json字符串?如果你的json已经在string中,你不必做stringify。如果你有Chrome调试器或其他浏览器调试器,你可以看到你的var的类型。

相关问题