[英]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.