Javascript:从JSON对象数组访问值

时间:2016-09-19 09:36:48

标签: javascript arrays json object

我收到一个从远程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

我如何访问此对象内的值?

3 个答案:

答案 0 :(得分:3)

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

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

如果要在适当位置使用它,则必须手动转义每个反斜杠,例如

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

代码可以工作。

答案 1 :(得分:0)

问题是 webservice 发送 无效 JSON。

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

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

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

\ 之外的任何Unicode字符都将由解析器处理。

表示终止,而 \ 的处理方式则不同,具体取决于后面的字符。例如\n,此处字母 n \ 之后,它将被视为换行符。下面的图片来自json.org描述的更好:

http://www.json.org/string.gif

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

答案 2 :(得分:-2)

像这样解析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);