Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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
使用jQuery解析嵌套JSON中的第二级_Jquery_Json_Parsing - Fatal编程技术网

使用jQuery解析嵌套JSON中的第二级

使用jQuery解析嵌套JSON中的第二级,jquery,json,parsing,Jquery,Json,Parsing,我一直在环顾四周,似乎有一些关于如何做类似事情的例子,但我尝试了不同的方法,还没有找到有效的解决方案 我有这个JSON文件: [ { "name": "tool 1", "basic":[{ "description": "text", "color": "red" }] }, { "name": "tool 2", "basic":[{ "description": "text", "col

我一直在环顾四周,似乎有一些关于如何做类似事情的例子,但我尝试了不同的方法,还没有找到有效的解决方案

我有这个JSON文件:

 [
  {
    "name": "tool 1",
    "basic":[{
      "description": "text",
      "color": "red"
    }]
  },

  {
    "name": "tool 2",
    "basic":[{
      "description": "text",
      "color": "red"
    }]
  }
]
所以我使用jQuery来解析它,我的代码如下所示:

$.getJSON("/js/data.json", function(data) {

  $.each(data, function(key,val) {
    console.log(val.name);
  });
});
它适用于第一级项目,如“名称”;但是如果我想用“描述”和“颜色”做同样的事情,似乎不起作用,没有为每一个单独的“每个…”做一个,在主要的一个里面

我试图找到一个简单而优雅的解决方案,例如:

console.log(val.basic.color);
但它似乎不起作用(“未定义”。)


有什么想法或建议吗?

因为
val.basic
是一个数组,所以需要对它进行循环

$.getJSON("/js/data.json", function(data) {

  $.each(data, function(key,val) {
    console.log(val.name);
    $.each(val.basic, function(index, basic) {
      console.log(basic.description, basic.color);
    });
  });
});
如果您只关心第一个元素,则可以为其编制索引:

console.log(val.basic[0].description, val.basic[0].color);

感谢Barmar,我想为其他人发布解决方案

这就是JSON现在的格式,删除
[]
以删除数组:

[
  {
    "name": "tool 1",
    "basic_info":{
      "description": "text 1",
      "color": "blue"
    },
    "advanced":{
      "description": "text 1 advanced",
      "color": "blue advanced"
    }
  },

  {
    "name": "tool 2",
    "basic_info":{
      "description": "text 1",
      "color": "red"
    },
    "advanced":{
      "description": "text 2 advanced",
      "color": "red advanced"
    }
  }
]
这是我用来访问第二级值的代码:

$.getJSON("/js/data.json", function(data) {

  $.each(data, function(key,val) {
    console.log(val.basic_info.color);
  });
});

非常感谢。也许我的JSON格式不正确。我这样做是为了能够识别某些层次/子层次和组值。但我更希望能够访问每个项目,而不依赖于它所在的级别,而无需再次循环。您有什么建议吗?如果只有一项,请不要将其放入数组中。使其成为
“basic”:{“description”:“text”,“color”:“red”}
。那么你最初的尝试就成功了。