javascript - 使用 JS 从嵌套 JSON 中提取值到数组
问题描述
我有一个带有嵌套对象的 JSON 文件,我需要从每个对象中提取特定键的值并保存到数组中。无需保留结构或顺序。
请参阅下面的 JSON。我需要提取'text'
键的值并得到这样的结果数组
["CPUs", "AMD", "Ryzen", "intel",....]
实现这一目标的最佳方法是什么?
[
{
"itemID":"1",
"items":[
{
"itemID":"2",
"items":[
{
"itemID":"3",
"items":[
{
"itemID":"15",
"text":"Ryzen"
},
{
"itemID":"16",
"text":"Threadripper"
}
],
"text":"AMD",
},
{
"itemID":"66",
"items":[
{
"itemID":"76",
"text":"i5"
},
{
"itemID":"77",
"text":"i7"
},
{
"itemID":"78",
"text":"i3"
}
],
"text":"Intel"
},
{
"itemID":"70",
"text":"Apple"
}
],
"text":"CPUs"
}
],
"text":"computer parts"
},
{
"itemID":"4",
"items":[
{
"itemID":"5",
"items":[
{
"itemID":"21",
"text":"porsche"
},
{
"itemID":"22",
"text":"maserati"
},
{
"itemID":"23",
"text":"ferrari"
}
],
"text":"sports cars"
}
],
"text":"cars"
}
]
解决方案
简单的递归应该有助于遍历数组以获取具有该text
属性的对象
const data = [{"itemID":"1","items":[{"itemID":"2","items":[{"itemID":"3","items":[{"itemID":"15","text":"Ryzen"},{"itemID":"16","text":"Threadripper"}],"text":"AMD"},{"itemID":"66","items":[{"itemID":"76","text":"i5"},{"itemID":"77","text":"i7"},{"itemID":"78","text":"i3"}],"text":"Intel"},{"itemID":"70","text":"Apple"}],"text":"CPUs"}],"text":"computer parts"},{"itemID":"4","items":[{"itemID":"5","items":[{"itemID":"21","text":"porsche"},{"itemID":"22","text":"maserati"},{"itemID":"23","text":"ferrari"}],"text":"sports cars"}],"text":"cars"}];
function getText(item) {
let result = [];
if (item.text) result.push(item.text);
for (const key in item) {
if (item.hasOwnProperty(key) && typeof item == 'object') result.push(...getText(item[key]));
}
return result;
}
data.forEach(item => console.log(getText(item)));
推荐阅读
- r - 通过指数平滑获得预测的 RMSE
- node.js - 命令行工具的跨平台分发
- c# - 错误:ConnectionString 属性尚未初始化
- database - 内存中的sqlite出现“没有这样的表”错误
- python - 如何使用 tweepy 和 python 获取给定推文的回复?
- apache-kafka - Message Broker - 作业之间的依赖关系
- javascript - Laravel - Dropzone不上传所有文件
- linkedin - LinkedIn Companies API 分页已损坏
- spring - 为什么 Flux iterable 在 Spring Boot Controller 中对来自 mongodb 的数据不起作用?
- mysql - 显示两个日期之间的所有日期数据;如果特定日期不存在行,则使用 sequelize 在所有列中显示零