簡體   English   中英

如何在 JavaScript 中訪問 JSON 數組

[英]How do I access a JSON array in JavaScript

我有一個 PHP 腳本,我向它發出了 Ajax 請求,並且大部分都可以正常工作,但是我無法訪問返回給 JavaScript 函數的數據中的數組。

所以,PHP 有一堆常規變量和一個數組。 數組 $places 有四個元素,每個元素有三個值,如下所示:

[["z","815","1"],["w","2813","0"],["s","1582","2"],["b","1220","5"]]

PHP 腳本的相關摘錄是:

$encoded_places = json_encode($places);  // if I don't do this then I end up with a value of "Array"
$qobject->name = "$name";
$qobject->multi = "$multi";
$qobject->places= "$encoded_places";

$myJSON = json_encode($qobject);
echo $myJSON;

在JavaScript腳本中(使用JQuery),我成功地從Ajax請求中獲取了數據,我可以訪問所有數據,除了$places數據。

 $.getJSON(url, function(data, status){

   var stringified = JSON.stringify(data);
   var parsedObj = JSON.parse(stringified);

   var x = parsedObj.name; // alert(x);  // which works fine

   var myArray = new Array();
   myArray.push(parsedObj.places);

   for(var i = 0; i < myArray.length; i++){
        console.log(myArray[i]);
   }

...並且控制台將顯示我期望的內容,即:

[["z","815","1"],["w","2813","0"],["s","1582","2"],["b","1220","5"]]

但是,我很難訪問這些值。 例如,假設我嘗試訪問第一個元素的“815”部分,例如:myArray[0][1],我最終得到的只是“[”。

我想這整段數據不知何故只是一個字符串,而不是一個數組,但我對 JavaScript 不夠熟悉,不知道如何進行。

例如,如果我在 JavaScript 腳本中執行此操作(希望在警報中看到 815、2813、1582 和 1220),我將看到的只是帶有“[”的單個警報。 (即它只循環一次,並選擇位置 1 的字符)。

for(var i = 0; i < myArray.length; i++){
    console.log(myArray[i]);
    alert(myArray[i][1]);                                                                                                             
}

我非常感謝有人解釋:(a)我如何訪問 JS 中的各個元素和值(b)我如何遍歷它們,雖然大概一旦它是一個數組而不是一個字符串,那么上面的代碼應該這樣做。

非常感謝您的幫助。

現在已解決:正如@charlietfl 所指出的,在下面使用引號

$qobject->places= "$encoded_places";

把事情搞砸了,同時在 $places 上使用了 json_encode。 但是,如果不刪除引號,兩種方式都不起作用。 因此,刪除了引號並在最后對整個結構使用了 json_encode,現在可以正常工作了。

所以,上面給出的原始代碼片段現在看起來像:

$qobject->name = $name;
$qobject->multi = $multi;
$qobject->places= $places;

$myJSON = json_encode($qobject);
echo $myJSON;

改變

$qobject->places = "$encoded_places";

$qobject->places = $places;

並去掉$encoded_places = json_encode($places); 以便對 json_encode 的一次調用序列化整個結構

嘗試這個:

$.getJSON(url, function(data, status){
  var parsedObj = JSON.parse(stringified);

  console.table(parsedObj.places);
  console.log(parsedObj.places)[0][0];
}

在發布代碼的getJSON上下文中, data已經是一個 JSON 字符串。 所以這一行是多余的字符串化你的 JSON 字符串:

var stringified = JSON.stringify(data);

stringified現在設置為來自data參數的有效 JSON 字符串的文字/轉義版本:

  [[\"z\",\"815\",\"1\"],[\"w\",\"2813\",\"0\"],[\"s\",\"1582\",\"2\"],[\"b\",\"1220\",\"5\"]]

當將該雙字符串化值傳遞給JSON.parse以用於parsedObj引用時,它只會再次成為原始 JSON 字符串(在警告框中看起來似乎是正確的)。

字符串在 JavaScript 中是可迭代的,所以 for 循環只是遍歷字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM