我想从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",
},
],
},
]
}
答案 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;
同样,我们也可以为他人做一些事情以获取键值。