Разбор второго уровня во вложенном JSON с jQuery - PullRequest
0 голосов
/ 09 января 2020

Я оглядывался по сторонам, и, кажется, есть несколько примеров того, как делать подобные вещи, но я пробовал разные подходы и не нашел рабочего решения.

I у меня есть 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);

Но, похоже, оно не работает («неопределено».)

Есть идеи или предложения?

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Благодаря 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);
  });
});
0 голосов
/ 09 января 2020

Поскольку val.basic является массивом, вам необходимо l oop поверх него.

$.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);
...