繁体   English   中英

Javascript:从 JSON 对象数组访问值

[英]Javascript: Accessing the values from JSON Object Array

我收到从远程 Web 服务返回的 JSON 字符串。 像这样的东西:

[{
    "id": "001",
    "link": "<a href=\"https://www.google.com\">Google</a>"
}, {
    "id": "002",
    "link": "<a href=\"https://www.yahoo.com\">Yahoo!</a>"
}]

但是当我尝试在我的 Javascript 中解析它时,我在解析它时遇到了问题。 我试过:

var response_string = '[{"id":"001","link":"<a href=\"https://www.google.com\">Google</a>"},{"id":"002","link":"<a href=\"https://www.yahoo.com\">Yahoo!</a>"}]';
console.log("Output (1) --> ", response_string);

response_string = JSON.stringify(response_string);
console.log("Output (2) --> ", response_string);

var response_object = JSON.parse(response_string);
console.log("Output (3) --> ", response_object);

console.log("Value: " + response_object[0].id);
console.log("Value: " + response_object[0]['id']);

然后输出如下:

Output (1) -->  [{"id":"001","link":"<a href="https://www.google.com">Google</a>"},{"id":"002","link":"<a href="https://www.yahoo.com">Yahoo!</a>"}]

Output (2) -->  "[{\"id\":\"001\",\"link\":\"<a href=\"https://www.google.com\">Google</a>\"},{\"id\":\"002\",\"link\":\"<a href=\"https://www.yahoo.com\">Yahoo!</a>\"}]"

Output (3) -->  [{"id":"001","link":"<a href="https://www.google.com">Google</a>"},{"id":"002","link":"<a href="https://www.yahoo.com">Yahoo!</a>"}]

Value: undefined

Value: undefined

请问如何访问该对象内的值?

您不能简单地按原样复制粘贴原始响应并将其用作字符串文字,因为字符串文字有自己的语法规则。

其中之一 - 使用转义序列,就是您犯了错误的地方。

如果你想就地使用它,你必须手动转义每个反斜杠,比如

 var response_object = JSON.parse('[{"id": "001","link": "<a href=\\\\"https://www.google.com\\\\">Google</a>"}, {"id": "002","link": "<a href=\\\\"https://www.yahoo.com\\\\">Yahoo!</a>"}]'); // --------------------------------------------------------------^^-----------------------^^----------------------------------------------^^----------------------^^ console.log("Value: " + response_object[0].id);

对于从远程服务器检索 JSON 字符串的代码,您不需要进行任何更改,只需JSON.parse()就可以很好地解析它。

因此,假设response_string包含来自远程服务器的整个响应以及一个提到的 JSON 字符串(没有任何额外的处理),那么这个:

var response_object = JSON.parse(response_string);
console.log("Output (3) --> ", response_object);

代码会起作用。

问题是,web服务发送无效JSON。

{"JSON": "This is "not" valid JSON" }

任何 JSON 中的引号都必须转义

{"JSON": "This is \"valid\" JSON" }

除了"\\之外的任何 Unicode 字符都将被解析器按原样处理。

"表示终止,而\\根据后面的字符而不同。例如\\n ,这里的字母n\\之后将被视为换行符。下面从json.org截取的图片对其进行了更好的描述:

因此,您应该将此错误报告给 Web 服务提供商。 它必须被修复。

像这样解析json

var res = JSON.parse('[{"id": "001","link": "<a href=\\"https://www.google.com\\">Google</a>"}, {"id": "002","link": "<a href=\\"https://www.yahoo.com\\">Yahoo!</a>"}]');
console.log(res);
console.log(res[0].id);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM