Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:从JSON对象数组访问值_Javascript_Arrays_Json_Object - Fatal编程技术网

Javascript:从JSON对象数组访问值

Javascript:从JSON对象数组访问值,javascript,arrays,json,object,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>" }] [{ “id”:“001”, “链接”:” }, { “i

我收到一个从远程Web服务返回的JSON字符串。大概是这样的:

[{
    "id": "001",
    "link": "<a href=\"https://www.google.com\">Google</a>"
}, {
    "id": "002",
    "link": "<a href=\"https://www.yahoo.com\">Yahoo!</a>"
}]
[{
“id”:“001”,
“链接”:”
}, {
“id”:“002”,
“链接”:”
}]
但是,当我试图用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']);
var response_string='[{“id”:“001”,“link”:“},{“id”:“002”,“link”:“}]”;
log(“输出(1)-->”,响应字符串);
response\u string=JSON.stringify(response\u string);
log(“输出(2)-->”,响应字符串);
var response\u object=JSON.parse(response\u字符串);
log(“输出(3)-->”,响应对象);
log(“值:+response\u对象[0].id”);
log(“值:+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
Output(1)->[{“id”:“001”,“link”:“},{“id”:“002”,“link”:“}]
输出(2)->“[{\'id\':\'001\',\'link\':\'”},{\'id\':\'002\',\'link\':\'”}”
输出(3)->[{“id”:“001”,“link”:“},{“id”:“002”,“link”:“}]
值:未定义
值:未定义

如何访问此对象中的值?

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

其中之一是使用转义序列,这是你犯了错误的地方

如果您想在适当的位置使用它,您必须手动转义每个反斜杠,如

var response_object=JSON.parse('[{“id”:“001”,“link”:“},{“id”:“002”,“link”:“}”);
// --------------------------------------------------------------^^-----------------------^^----------------------------------------------^^----------------------^^
log(“值:+response\u对象[0].id”)像这样解析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);
var res=JSON.parse('[{“id”:“001”,“link”:“},{“id”:“002”,“link”:“}]”);
控制台日志(res);
console.log(res[0].id);

问题在于webservice发送无效的JSON

{"JSON": "This is "not" valid JSON" }
任何JSON中的引号都必须是转义的:

{"JSON": "This is \"valid\" JSON" }
\之外的任何Unicode字符都将按原样由解析器处理

表示终止,而\根据其后面的字符进行不同的处理。例如
\n
,这里字母n位于\之后,它将被视为换行符。下面从中拍摄的照片更好地描述了它:


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

在输出2之前,将json字符串字符串化。在Outupt3之前,您需要解析字符串化的json字符串并再次获取json字符串。删除JSON.stringify
,一切都会正常工作。那么为什么要对字符串进行stringify呢?这有什么意义呢?你得到一个JSON字符串,然后对它进行字符串化,从而使它成为一个双重编码的JSON,然后对它进行一次解析。@t.niese:不完全:
Uncaught SyntaxError:JSON中的意外标记h位于位置30(…)
JSON.parse('[{“id”:“001”,“link”:“},{“id”:“002”,“link”:“}”)---在这里,看看他们的JSON是完全有效的。但是期望JSON字符串可以作为字符串文本复制是他们犯的错误。我知道这个问题,如果是从源代码中,使用“双引号”。但正如我提到的,它来自远程Web服务。我无法纠正它。既然我收到了原样,我该怎么办呢?我知道这个问题,如果是从来源,用“双引号”。但正如我提到的,它来自远程Web服务。我无法纠正它。既然我收到了原样,我该怎么办@夏期劇場 从远程服务器检索时,它可以正常工作。(见答案的最后一句)@夏期劇場: 这个答案的意思是:删除这一行:
response\u string=JSON.stringify(response\u string),然后你的代码就可以工作了。请解释一下这个答案有什么问题?