问题如下:
我有一个JSON文件,其中包含以下名称的对象:"item0": { ... }, "item1": { ... }, "item2": { ... }
。但是通过if方法时,我无法访问它们。
到目前为止我所做的:
$.getJSON('/assets/storage/items.json', function(data) {
jsonStringify = JSON.stringify(data);
jsonFile = JSON.parse(jsonStringify);
addItems();
});
var addItems = function() {
/* var declarations */
for (var i = 0; i < Object.keys(jsonFile).length; i++) {
path = 'jsonFile.item' + i;
name = path.name;
console.log(path.name);
console.log(path.type);
}
}
如果我console.log path.name返回未定义。但是,如果我输入jsonFile.item0.name,它将返回该值。因此,如何使用字符串路径将其视为对象,或者是否有其他方法来命名json项目。
答案 0 :(得分:1)
正如其他人所述,'jsonFile.item' + i
并未从jsonFile
检索任何内容:它只是一个字符串。
其他问题:
data
是您要使用的对象jsonFile
。它是一个对象,而不是JSON。 JSON是文本。但是由于上述原因,您不需要此变量var
,let
或const
声明变量,并避免使用全局变量。$.getJSON( ).then
)item0
,item1
,... 建议的代码:
$.getJSON('/assets/storage/items.json').then(function(data) {
for (const path in data) {
console.log(data[path].name, data[path].type);
}
});
答案 1 :(得分:0)
您想要的是使用动态字符串值作为键而不是对象键的对象表示法。因此,您可以使用object.dynamicName
来代替object[dynamicName]
之类的东西。
所以在您的示例中就是这样。
path = 'item' + i;
jsonFile[path].name
答案 2 :(得分:0)
恐怕您不能期望字符串的行为像对象一样。
您可以执行以下操作:
path = `item${i}`
name = jsonFile[path].name