Разобрать дерево с помощью getJson - PullRequest
1 голос
/ 24 октября 2019

У меня есть файл JSON с данными заказа. Файл JSON отформатирован так:

{
  "orders": [
    {"name": "Peter", "email": "peter@aol.com"}

    {"name": "David", "email": "david@aol.com"}

    { "name": "George", "email": "george@aol.com"}
  ]
}

Как видите;все данные являются частью ветви с именем "orders", и тогда каждый ордер является собственной веткой, но у ветви нет имени.

Я пытаюсь создать список "name" s в наборе данных.

С упрощенным набором данных я бы сделал что-то вроде:

$(data).each(function(i, name){
    $('#namesText').append($("li")
        .append($("li").append(name.name))
  });
})

Этооднако не работает, так как данные не находятся на первом уровне дерева.

Мой вопрос: как мне перейти на уровень ниже, если у уровней нет имени?

Ответы [ 3 ]

1 голос
/ 24 октября 2019

Это звучит как проблема DFS, когда у каждого объекта есть ключи, которые могут быть примитивным типом данных или другим объектом. Так как поле name может находиться на любом уровне в данном заданном ограничении, которое необходимо решить, я бы сказал, использовать DFS-алгоритм, где он пересекает каждый ключ в объекте, и если есть другой объект, изучите его, пока не найдете name поле. Лучшее решение - изменить структуру данных так, чтобы вы гарантированно знали, какой уровень и местоположение есть у поля name в любое время.

0 голосов
/ 24 октября 2019

Попробуйте

namesText.innerHTML= data.orders.map(p=>`<li>${escape(p.name)}</li>`).join``

var data = {
  "orders": [
    {
      "name": "Peter",
      "email": "peter@aol.com",
    },
    {
      "name": "David",
      "email": "david@aol.com",
    },
    {
      "name": "George",
      "email": "george@aol.com",
    }
  ]
}

namesText.innerHTML= data.orders.map(p=>`<li>${escape(p.name)}</li>`).join``
<ul id="namesText"></ul>
0 голосов
/ 24 октября 2019

Если вы хотите получить список свойств name из элементов массива orders, вы можете использовать Array.map:

const names = myJson.orders.map(o => o.name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...