【问题标题】:Parsing second level in nested JSON with jQuery使用 jQuery 解析嵌套 JSON 中的第二级
【发布时间】:2020-04-26 12:57:21
【问题描述】:

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

我有这个 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);

但它似乎不起作用(“未定义”。)

有什么想法或建议吗?

【问题讨论】:

    标签: jquery json parsing


    【解决方案1】:

    由于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);
    

    【讨论】:

    • 谢谢!也许我的 JSON 格式不正确。我这样做是为了识别某些层次结构/子级别和组值。但我宁愿能够访问每个项目,而不管它所在的级别,而不必再次循环。你有什么建议吗?
    • 如果只有一项,请不要将其放入数组中。让它"basic": { "description": "text", "color": "red" }。那么你最初的尝试就会奏效。
    【解决方案2】:

    感谢 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);
      });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2021-10-22
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2015-08-28
      相关资源
      最近更新 更多