gpt4 book ai didi

JavaScript 无法在 Angular 中正确解析 JSON

转载 作者:行者123 更新时间:2023-12-02 16:32:02 30 4
gpt4 key购买 nike

{"status":"success","responseMesg":"{\"totalDomains\":1,\"accepted\":0,\"rejected\":0,\"errors\":\"[{\\\"errorMessage\\\":\\\"Could not connect to XRP, max retry count exceeded\\\",\\\"domainEventId\\\":\\\"119\\\"}]\"}"}

高于服务调用的响应。我使用 angular.fromJson 将其转换为 JSON。我能够正确访问接受、拒绝、状态、totalDomains、responseMesg。但我无法访问错误消息。当我打印错误时,我看到以下内容

[{"errorMessage":"Could not connect to XRP, max retry count exceeded","domainEventId":"119"}]

看起来像一个数组。但我无法访问此对象数组中的各个对象,例如如果 arr 是数组,那么我想访问 arr[0].errorMessage,但无法到。它打印未定义。当我执行 arr.length 时,它打印了 93。这只是被视为 string 吗?怎么解决?

最佳答案

看起来您在几个级别上将 JS 对象序列化为 JSON。原因如下:

responseMesg 只是一个字符串,解析后的 JSON 如下所示:

{
"status": "success",
"responseMesg": "{\"totalDomains\":1,\"accepted\":0,\"rejected\":0,\"errors\":\"[{\\\"errorMessage\\\":\\\"Could not connect to XRP, max retry count exceeded\\\",\\\"domainEventId\\\":\\\"119\\\"}]\"}"
}

现在您需要将 responseMesg 单独解析为 JSON,输出如下:

{
"totalDomains": 1,
"accepted": 0,
"rejected": 0,
"errors": "[{\"errorMessage\":\"Could not connect to XRP, max retry count exceeded\",\"domainEventId\":\"119\"}]"
}

下一步是解析errors,这又只是一个字符串。解析会给你这个:

[
{
"errorMessage": "Could not connect to XRP, max retry count exceeded",
"domainEventId": "119"
}
]

我已经检查过JSONLint和 angular.fromJson 给了我完全相同的输出,所以你可以尝试这个:

var a = angular.fromJson({"status":"success","responseMesg":"{\"totalDomains\":1,\"accepted\":0,\"rejected\":0,\"errors\":\"[{\\\"errorMessage\\\":\\\"Could not connect to XRP, max retry count exceeded\\\",\\\"domainEventId\\\":\\\"119\\\"}]\"}"});
a.responseMesg = angular.fromJson(a.responseMesg);
a.responseMesg.errors = angular.fromJson(a.responseMesg.errors);
console.log(a);

为了避免将来发生这种情况,请完全构造 JS 对象(无需序列化),然后序列化整个对象。如果您无法控制嵌套序列化,请在构建响应时尝试反序列化(如果检测到字符串)。

尝试使用JSONLint验证您的 JSON。希望对您有所帮助。

关于JavaScript 无法在 Angular 中正确解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28207520/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com