用getJson解析树

时间:2019-10-24 13:11:25

标签: javascript jquery html json

我有一个包含订单数据的JSON文件。 JSON文件的格式如下:

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

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

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

如您所见;所有数据都是一个名为"orders"的分支的一部分,然后每个订单都是其自己的分支,但是该分支没有名称。

我正在尝试生成数据集中的"name"的列表。

使用简化的数据集,我会做类似的事情:

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

但是这不起作用,因为数据不在树的第一级。

我的问题是,当关卡没有名字时,如何下调关卡?

3 个答案:

答案 0 :(得分:1)

这听起来像DFS问题,其中每个对象都有可能是原始数据类型或另一个对象的键。由于name字段可以在您需要解决的给定约束中处于任意级别,因此我想说使用DFS算法遍历对象中的每个键,如果有另一个对象,请仔细研究直到找到name字段。更好的解决方案是重新设计数据结构,以确保您随时知道name字段位于哪个级别和位置。

答案 1 :(得分:0)

如果要从name数组的元素中获取orders属性的列表,可以使用Array.map

const names = myJson.orders.map(o => o.name);

答案 2 :(得分:0)

尝试

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>