如何从JSON获取给定特定键的所有值(例如name)而没有循环?

时间:2019-06-19 07:00:09

标签: javascript arrays json

我想从JSON中获取所有名称和标签,而无需循环。有没有一种方法可以使用任何过滤器方法获取?

"sections": [
  {
    "id": "62ee1779",
    "name": "Drinks",
    "items": [
      {
        "id": "1902b625",
        "name": "Cold Brew",       
        "optionSets": [
          {
            "id": "45f2a845-c83b-49c2-90ae-a227dfb7c513",
            "label": "Choose a size",
          },
          {
            "id": "af171c34-4ca8-4374-82bf-a418396e375c",
            "label": "Additional Toppings",
          },
        ],
      },
    ]
  }

2 个答案:

答案 0 :(得分:1)

当您说“无循环”时,我将其视为没有For循环。因为数组的任何类型的遍历都涉及迭代,更不用说嵌套遍历了。 您可以使用reduce方法在内部为您完成操作,并为您提供所需的格式。

尝试一下:

const data = {
  sections: [
    {
      id: "62ee1779",
      name: "Drinks",
      items: [
        {
          id: "1902b625",
          name: "Cold Brew",
          optionSets: [
            {
              id: "45f2a845-c83b-49c2-90ae-a227dfb7c513",
              label: "Choose a size"
            },
            {
              id: "af171c34-4ca8-4374-82bf-a418396e375c",
              label: "Additional Toppings"
            }
          ]
        }
      ]
    }
  ]
};

x = data.sections.reduce((acc, ele) => {
  acc.push(ele.name);
  otherName = ele.items.reduce((acc2, elem2) => {
    acc2.push(elem2.name);
    label = elem2.optionSets.reduce((acc3, elem3) => {
      acc3.push(elem3.label);
      return acc3;
    }, []);
    return acc2.concat(label);
  }, []);
  return acc.concat(otherName);
}, []);

console.log(x);

继续,然后按“运行摘要”以查看它是否与所需的输出匹配。 有关更多信息,reduce method

答案 1 :(得分:-1)

在cJSON上下文中

是的,我们可以获取任何对象的键值。

1-每个键值由一个对象指向。只需获取该对象,然后从那里获取键值。

在上述情况下, 先决条件: root必须包​​含json格式,root必须是cJSON指针。如果没有,我们可以定义它并使用cJSON_Parse()解析json。

第一个名称对象是“ sections”将使用

  

cJSON * test = cJSON_GetObjectItem(root,“ sections”);

     

char * name1 = cJSON_GetObjectItem(test,“ name”)-> valuestring;

第二个名称键值

  

cJSON * test2 = cJSON_GetObjectItem(test,“ items”);

     

char * name2 = cJSON_GetObjectItem(tes2,“ name”)-> valuestring;

同样,我们也可以为他人做一些事情以获取键值。