繁体   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