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

Javascript 从JSON对象读取值

Javascript 从JSON对象读取值,javascript,json,object,loops,Javascript,Json,Object,Loops,我目前正在尝试从JSON对象获取内容。 我一直在谷歌搜索,我认为应该有效的东西,由于某种原因,没有 JSON如下所示: {"locatie0":{"naam0":["Domplein"],"value0":["value1"]},"locatie1":{"naam1":["Neude"],"value1":["value1"]},"locatie2":{"naam2":["Vredenburg"],"value2":["value1"]},"locatie3":{"naam3":["Stadhu

我目前正在尝试从JSON对象获取内容。 我一直在谷歌搜索,我认为应该有效的东西,由于某种原因,没有

JSON如下所示:

{"locatie0":{"naam0":["Domplein"],"value0":["value1"]},"locatie1":{"naam1":["Neude"],"value1":["value1"]},"locatie2":{"naam2":["Vredenburg"],"value2":["value1"]},"locatie3":{"naam3":["Stadhuisbrug"],"value3":["value1"]},"locatie4":{"naam4":["Korte Minrebroederstraat"],"value4":["value1"]}}
我使用下面的代码来读取文件,但由于某些原因,它总是返回undefined或NaN

$.ajax({
    url: "_data/pleinen.json",
    type: 'get', 
    dataType: "json", 
    success: function(data) {
        for(var k = 0; k < _loc.length; k += 1) {
            var _locaties = data.locatie[k].naam[k];
            // Should alert "Domplein", "Neude", "Vredenburg", "Stadhuisbrug", "Korte Minrebroekstraat", 
            alert(_locaties);
        }
    }
});
有人能看到我的代码中是否有错误,或者是否有更好的方法读取值吗?

locatie[k]尝试访问locatie中对象的属性k,但在您的情况下,数字是名称本身的一部分。您必须动态生成属性名称。此外,嵌套对象的每个属性都是一个包含一个元素的数组,因此必须访问第一个元素:

var _locaties = data['locatie' + k]['naam' + k][0];
不过,您的数据结构有点奇怪。属性名称中的数字使得访问数据更加困难。如果可以更改,请将其更改为对象数组,如果不需要,请不要将数组用于属性:

[{"naam": "Domplein", "value": "value1"}, {"naam": "Neude", "value":"value1"}]
然后,访问数据很简单:

for (var i = 0, l = data.length; i < l; i++) {
    var _locaties = data[i].naam;
}
locatie和naam不是数组,因此您无法像访问那样访问它们

您必须将数字与名称组合为字符串。诸如此类

data['locatie'+k]
试试这个:

$.ajax({
    url: "_data/pleinen.json",
    type: 'get', 
    dataType: "json", 
    success: function(data) {
        for(var k = 0; k < _loc.length; k += 1) {
            var _locaties = data['locatie'+k]['naam'+k][0]; 
            alert(_locaties);
        }
    }
});
由于naam属性的值是数组,您需要从中提取第一项以获取字符串值

k = 0;
console.log( 
    data[ 'locatie'+ k]['naam'+ k][0], 
    data[ 'locatie'+ k]['value'+ k ][0]
);

k = 1;
console.log( 
    data[ 'locatie'+ k]['naam'+ k][0], 
    data[ 'locatie'+ k]['value'+ k ][0]
);

JSON不能像数组那样保证任何顺序

但在您的例子中,JSON的键具有索引提示,因此请尝试使用以下命令访问naam:

 data["locatie" + k]["naam" + k]

给定json,您应该访问data.locatie0/1/2。。。而不是data.locatie(如果不是打字错误)。在json中没有名为locatie的数组!!!我想动态访问-1?@user1654209的原因。将其静态设置为kindoff将删除for循环的整个点。@555k感谢您的深刻评论,但我知道这一点。我的问题是如何从naam和值字段中获取值,而不是json对象背后的原理。谢谢,这解决了我的问题。是的,我知道我的结构已关闭,但我不太擅长创建数组。为了澄清这一点,我在backoffice的其他地方制作了一个数组,用json_encode将其转换为json,并将其写入一个文件,然后在我的应用程序中读取该文件;在名称中包含索引显然表明结构不好,因为这就是数组的用途。数组中的每个元素都已具有索引。花些时间正确地创建结构是值得的,从长远来看,维护代码会更容易。我已经修复了生成json并保存到文件中的代码。现在我可以使用data['locatie'+k]['naam']访问naam字段。谢谢你的帮助。