Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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_Php_Arrays_Json_Ajax - Fatal编程技术网

如何在JavaScript中访问JSON数组

如何在JavaScript中访问JSON数组,javascript,php,arrays,json,ajax,Javascript,Php,Arrays,Json,Ajax,我有一个PHP脚本,我向它发出Ajax请求,大部分都可以正常工作,但是我在访问返回到JavaScript函数的数据中的数组时遇到了问题 因此,PHP有一组正则变量和一个数组。数组$places有四个元素,每个元素有三个值,如下所示: [["z","815","1"],["w","2813","0"],["s","1582","2

我有一个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]);
   }
但是,我很难访问这些值。例如,假设我尝试访问第一个元素的“815”部分,使用类似于:myArray[0][1]的内容,我最后得到的结果就是“[”

我想这整段数据只是一个字符串,而不是一个数组,但我对JavaScript还不够熟悉,不知道如何处理

例如,如果我在JavaScript脚本中执行此操作(希望在警报中看到815、2813、1582和1220),我将看到带有“[”的单个警报(即,它只执行一次循环,并选择位置1中的字符)

把事情搞砸了,在$places上使用json_编码。但是,如果不删除引号,任何一种方法都不起作用。因此,删除引号,在最后的整个结构上使用json_编码,现在效果很好

因此,上面给出的原始代码片段现在看起来像:

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

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

并去掉
$encoded_places=json_encode($places);
,这样对json_encode的一次调用就可以序列化整个结构的更改

$qobject->places = "$encoded_places";

然后去掉
$encoded_places=json_encode($places);
,这样对json_encode的一次调用就可以序列化整个结构

尝试以下方法:

$.getJSON(url、函数(数据、状态){
var parsedObj=JSON.parse(字符串化);
控制台。桌子(位置);
console.log(parsedObj.places)[0][0];
}
在发布的代码的
getJSON
上下文中,
data
已经是一个JSON字符串。因此,此行将冗余地字符串化JSON字符串:

var stringify=JSON.stringify(数据);
stringified
现在设置为
data
参数中有效JSON字符串的文本/转义版本:

  [[\"z\",\"815\",\"1\"],[\"w\",\"2813\",\"0\"],[\"s\",\"1582\",\"2\"],[\"b\",\"1220\",\"5\"]]
当双字符串化值被传递给
parsedObj
引用的
JSON.parse
时,它只是再次成为原始JSON字符串(在警报框中看起来似乎正确)

字符串在JavaScript中是可编辑的,因此for循环只是遍历字符串。

试试以下方法:

$.getJSON(url、函数(数据、状态){
var parsedObj=JSON.parse(字符串化);
控制台。桌子(位置);
console.log(parsedObj.places)[0][0];
}
在发布的代码的
getJSON
上下文中,
data
已经是一个JSON字符串。因此,此行将冗余地字符串化JSON字符串:

var stringify=JSON.stringify(数据);
stringified
现在设置为
data
参数中有效JSON字符串的文本/转义版本:

  [[\"z\",\"815\",\"1\"],[\"w\",\"2813\",\"0\"],[\"s\",\"1582\",\"2\"],[\"b\",\"1220\",\"5\"]]
当双字符串化值被传递给
parsedObj
引用的
JSON.parse
时,它只是再次成为原始JSON字符串(在警报框中看起来似乎正确)


字符串在JavaScript中是可编辑的,所以for循环只是在字符串上运行。

什么是
console.log(typeof parsedObj.places)
给你?另外,你不需要创建一个新的
数组,因为它看起来已经是一个数组了,而且
myArray。push
只会将整个数组推到新
数组的第一个位置,不确定这是否是你想要的。不要对$places进行json编码。只需让
$myJSON=json\u编码($qobject)
执行所有序列化。解析时得到的是嵌套的json字符串,而不是您认为正在获取的数组console.log(typeof parsedObj.places);/string然后您应该执行
var myArray=json.parse(parsedObj.places)
-归根结底,问题与@charlietfl的行为有关mentioned@goto1解析在内部使用
$.getJSON
What-does
console.log(typeof parsedObj.places)完成
给你?另外,你不需要创建一个新的
数组,因为它看起来已经是一个数组了,而且
myArray。push
只会将整个数组推到新
数组的第一个位置,不确定这是否是你想要的。不要对$places进行json编码。只需让
$myJSON=json\u编码($qobject)
执行所有序列化。解析时得到的是嵌套的json字符串,而不是您认为正在获取的数组console.log(typeof parsedObj.places);/string然后您应该执行
var myArray=json.parse(parsedObj.places)
-归根结底,问题与@charlietfl的行为有关mentioned@goto1解析是用
$在内部完成的。getJSON
谢谢,但是如果我去掉$encoded\u places位,只调用一次json\u encode,序列化整个结构,那么我的处境似乎更糟,因为我没有提供任何数据,而是e、 log(myArray[i])只给出了“数组”(而不是值字符串),console.log(typeof parsedObj.places)仍然给出了“字符串”。打印($places)
看起来像什么?你引用了
“$places”吗
因为那将是不正确的,用引号打电话很好!是的,那正是它。在不修改任何其他内容的情况下,我可以通过删除“$encoded\u places”中的引号来实现。非常感谢!!!我不确定如何/是否可以接受您的评论作为答案,但我非常感激。谢谢。稍后将查看其他评论。仍然不需要编码的位置,应该只能对json进行编码一次;我知道我使用了$places,而不是
$qobject->places = "$encoded_places";
$qobject->places = $places;
  [[\"z\",\"815\",\"1\"],[\"w\",\"2813\",\"0\"],[\"s\",\"1582\",\"2\"],[\"b\",\"1220\",\"5\"]]