如何使用非递归迭代函数提取JSON文件中所有键为text的对应值?
迭代提取嵌套JSON中所有text键值的方案
核心思路
采用栈实现的深度优先迭代遍历,全程无递归,避免递归栈溢出风险,同时省去JSON序列化的额外性能开销,处理大型JSON文件的效率远高于JSON.stringify替换器方案。
实现代码
function extractAllText(jsonObj) { const textList = [] const stack = [jsonObj] while (stack.length) { const currNode = stack.pop() // 跳过基础类型和null if (typeof currNode !== 'object' || currNode === null) continue // 匹配到text键就收集值,也可加&& currNode.type === 'text' 精准匹配示例结构 if ('text' in currNode) { textList.push(currNode.text) } // 把当前节点的子内容压入栈待遍历 stack.push(...(Array.isArray(currNode) ? currNode : Object.values(currNode))) } // 按需求用换行拼接结果 return textList.join('\n') } // 调用示例 const obj = JSON.parse(content) const ret = extractAllText(obj)
方案优势
- 纯迭代实现,无递归深度限制,可处理任意层级的嵌套JSON
- 没有额外序列化开销,大型文件处理性能比原有方案提升数倍
- 逻辑灵活可扩展,可随时增加过滤条件适配不同JSON结构
内容的提问来源于stack exchange,提问作者Gilbert Williams
相关产品推荐
相关产品推荐

