如何使用JavaScript在Json中读取数组

时间:2015-06-30 11:59:20

标签: javascript arrays json

我有一个Json数据,如下所示:

var x = {

"array1":"['x1','x2']",
"array2":"['a1', 'a2']"
}

我需要打印数组的各个元素,如下所示

x1
x2
a1
a2

当我var y = JSON.parse(x)时,它会给我"Unexpected token o"

它似乎来自 JSON.parse 行。如果我x = '["x1", "x2"]',没有错误,但我需要在 JSON中有两个数组。所以我该怎么读它们

感谢您的回答

5 个答案:

答案 0 :(得分:4)

那不是JSON。 JSON是一个字符串而不是一个对象,因此它的缩写为 J ava S cript O bject N \ totation。您所拥有的通俗地称为POJO或 P lain O ld J avaScript O 对象。它们是不同的。前者是类似于YAML或XML的数据交换格式,而后者是具有属性和值的实际对象。

您的POJO确实具有JSON值,但由于它已经是对象,因此您无法使用JSON.parse来解析整个对象。这就是“o”来自错误消息的地方。如果字符串不是字符串,JSON.parse将强制第一个参数:

var foo = {};
JSON.parse(foo); // is essentially doing this foo.toString() which is "[object Object]"
JSON.parse('{}'); // This would parse to an empty object though since it is a string

所以现在当它试图解析“[object Object]”时,它会看到可能是一个数组然后遇到一个未被引用的字符,“对象”中的“o”,因此会抛出一个错误。

要使您的示例成为JSON,您需要将其编写为:

var json = '{"array1":["x1","x2"],"array2":["a1","a2"]}';
var x = JSON.parse(json);

document.write('<pre>' + JSON.stringify(x, null, 4) + '</pre>');

所以,既然我们有一个真正的JSON值,我们可以回答你原来的问题:

var json = '{"array1":["x1","x2"],"array2":["a1","a2"]}';
var x = JSON.parse(json);

var vals = Object.keys(x).sort().reduce(function (arr, key) {
  arr = arr.concat(x[key]);
  return arr;
}, []).join('\n');

document.write('<pre>' + vals + '</pre>');

答案 1 :(得分:0)

我认为您的JSON应该如下所示

{
  "array1": ["x1", "x2"],
  "array2": ["a1", "a2"]
}

答案 2 :(得分:0)

以多种不同方式创建数组 - 两个示例

var x = [{array1:['x1','x2']},{array2:['a1','a2']}]
x[1].array2 produces ["a1", "a2"]
x[1].array2[0] produces "a1"

var xx = {array1:['x1','x2'],array2:['a1','a2']}
xx.array2 produces ["a1", "a2"]
xx.array2[0] produces "a1"

第三个例子

var xxx = {array1:{x1:'x1',x2:'x2'},array2:{a1:'a1',a2:'a2'}}
xxx.array1.x1 produces "x1"

答案 3 :(得分:0)

你有什么,'x'变量var x = {"array1":[...]...}已经是一个javascript对象,所以你可以简单地通过对象键并显示值。

将'x'作为对象,您可以使用以下内容:

var key,       
    result = '';

for (key in x) { 
    if (x.hasOwnProperty(key)) {
        result = result + x[key].join('\n') + '\n';
    }
}
// There you have the result...

正如约翰先前所说,对于JSON.parse(),您需要一个字符串作为参数才能将其解析为javascript对象。

答案 4 :(得分:-1)

所以,你可以使用这个脚本来做到这一点(也正确json - http://jsonformatter.curiousconcept.com/ - ,不知道为什么会这么低......我猜一个菜鸟没有意识到:D):

var x = {
 "array1": ["x1", "x2"],
 "array2": ["a1", "a2"]
}

for (var key in x) {
 if (x.hasOwnProperty(key)) {
 document.getElementById("test").innerHTML += key + " -> " + x[key]+" <br>";
}
}

我在这里创造了一个工作小提琴:

https://jsfiddle.net/rjzzqLmr/1/