Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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_Json - Fatal编程技术网

Javascript JSON字符串到多维数组

Javascript JSON字符串到多维数组,javascript,json,Javascript,Json,我似乎在PHP/JS之间前后转换数组时遇到问题。我正在使用一个从JavaScript到PHP页面的XmlHttpRequest,该页面使用json_encode对多维(2D)数组进行编码 在接收字符串时,我使用JSON.parse()对字符串进行解码,但它返回为1D数组。有没有办法将JSON字符串解析为多维数组而不是一维数组 接收到的JSON示例(来自CSV文件): 解析后,如果我尝试使用myArr[0][1]访问它,它将显示为未定义 如果这是显而易见的,请原谅我,我对JS和JSON是新手。编辑

我似乎在PHP/JS之间前后转换数组时遇到问题。我正在使用一个从JavaScript到PHP页面的XmlHttpRequest,该页面使用json_encode对多维(2D)数组进行编码

在接收字符串时,我使用JSON.parse()对字符串进行解码,但它返回为1D数组。有没有办法将JSON字符串解析为多维数组而不是一维数组

接收到的JSON示例(来自CSV文件):

解析后,如果我尝试使用myArr[0][1]访问它,它将显示为未定义


如果这是显而易见的,请原谅我,我对JS和JSON是新手。编辑:在编辑显示实际JSON后:

您定义的JSON不是定义二维数组,而是定义一维对象数组。反序列化后,您可以访问(比如)第一本书的标题,如下所示:

alert(myArray[0].title);
(请注意,在该示例中,为了将整个内容放在JavaScript字符串中,我必须对您提供的JSON中的单引号进行转义;不要因此而感到困惑,您的JSON文本在您引用它时是正确有效的,只是我将它放在以单引号分隔的字符串中,因此我必须对其中的单引号进行转义)


原始答案

JavaScript数组始终是一维的,但数组中的每个条目本身都可以是对数组的引用,这有效地实现了二维数组。正确编码后,JSON对这些方面没有问题:

[
    [1, 2, 3],
    [4, 5, 6]
]
这是一个包含两个条目的数组的JSON符号,每个条目都是一个包含三个条目的数组

使用Crockford的JSON字符串生成器和解析器的示例(以下语法现在也是ECMAScript 5的标准语法,但并非所有浏览器都有):

输出:

a.length = 2 a[0] = 1,2,3 a[1] = 4,5,6 JSON string: [[1,2,3],[4,5,6]] b.length = 2 b[0] = 1,2,3 b[1] = 4,5,6 a、 长度=2 a[0]=1,2,3 a[1]=4,5,6 JSON字符串:[[1,2,3],[4,5,6]] b、 长度=2 b[0]=1,2,3 b[1]=4,5,6

你能举一个你收到的JSON的例子吗?既然你已经发布了JSON文本,我已经更新了我的答案,告诉你在反序列化后如何访问其中的数据。我最初的答案是数组,但你所引用的实际上只是一个对象数组。谢谢你的详细帮助。不必再问另一个问题,是否有一种简单的方法将数据从一个对象数组转储到一个数组中,或者我必须循环遍历每个数组并逐块提取数据?
var a, str, b;

a = [
    [1, 2, 3],
    [4, 5, 6]
];
display("a.length = " + a.length);
display("a[0] = " + a[0].join(","));
display("a[1] = " + a[1].join(","));
str = JSON.stringify(a);
display("JSON string: " + str);
b = JSON.parse(str);
display("b.length = " + b.length);
display("b[0] = " + b[0].join(","));
display("b[1] = " + b[1].join(","));
a.length = 2 a[0] = 1,2,3 a[1] = 4,5,6 JSON string: [[1,2,3],[4,5,6]] b.length = 2 b[0] = 1,2,3 b[1] = 4,5,6