我正在尝试在另一个JSON数组中创建一个JSON数组。
我想我做对了,但是当我调用第二个数组时,它返回undefined。
JSON文件:
var files = [
{"Files" : [
{"file1" : "file1"},
{"file2" : "file2"},
{"file3" : "file3"}
]},
{"Texts" : [
{"file4" : "file4"},
{"file5" : "file5"},
{"file6" : "file6"}
]}
];
当我尝试这个命令时,它可以工作 -
console.log(files[0]); // Works, returns the array
但是当我尝试这个命令时它不起作用 -
console.log(files[0][1]); // Not working, return undefined
我希望这会返回file2。
我做错了什么?
编辑: 该脚本从服务器获取类似的JSON文件,脚本需要遍历JSON。因此,请将名称(文件,文本,文件1,文件2等)视为未知..
答案 0 :(得分:4)
此:
console.log(files[0]);
不记录数组,它是数组中第一个元素的对象。要进入内部数组,您必须获取该对象的“Files”属性:
console.log(files[0].Files[1]);
记录的不仅仅是字符串“file2”,而是整个对象{ file2: "file2" }
。在JavaScript中,数字索引无法访问具有字符串属性名称的对象属性。也就是说,在对象中:
{ "foo": "hello world" }
根本没有[0]
属性。 JavaScript中的数组也是对象,可以使用字符串命名的属性,但它们与数字索引属性的集合是分开的。
答案 1 :(得分:3)
console.log(files[0]["Files"]) // will return array with file 1-3
console.log(files[0]["Texts"]) // will return array with file 4-6
或
console.log(files[0].Files) // will return array with file 1-3
console.log(files[0].Texts) // will return array with file 4-6
在您的示例files[0][1]
中为json工作
var files = [
[
{"file1" : "file1"},
{"file2" : "file2"},
{"file3" : "file3"}
],
[
{"file4" : "file4"},
{"file5" : "file5"},
{"file6" : "file6"}
]
];
EDIT
在这种情况下,您可以使用下一个for-loop
for (var key in files[0])
{
files[0][key] // here key is "Files", this will return files 1-3
}
答案 2 :(得分:2)
数组位于Files属性中:
console.log(files[0].Files[0]);
console.log(files[0].Files[1]);