簡體   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