如何使用jq遍历非数组JSON对象并查找非success的result
遍历非数组JSON对象查找指定条件项的方法
针对你的需求,这里提供几种实用的方法来遍历这个非数组的JSON对象,找出所有result值不等于success的项:
1. 使用for...in循环(基础遍历方式)
这是最经典的对象遍历方式,记得加上hasOwnProperty判断,避免遍历到原型链上的属性:
const data = { "affected-apps": { "result": "success", "outputs": { "affected_apps_array": [ "logger", "aws-sdk-wrapper", "transaction", "deposit", "identity", "user", "core" ] } }, "build-affected-apps": { "result": "success", "outputs": {} } }; for (const key in data) { if (data.hasOwnProperty(key)) { const item = data[key]; // 检查当前项是否存在result属性且值不为success if (item.result && item.result !== "success") { console.log(`不符合条件的项:${key},result值:${item.result}`); } } }
2. 使用Object.keys()配合forEach
Object.keys()会返回对象自身可枚举属性的键数组,再通过forEach遍历更简洁:
Object.keys(data).forEach(key => { const item = data[key]; if (item.result && item.result !== "success") { console.log(`不符合条件的项:${key},result值:${item.result}`); } });
3. 使用Object.entries()直接获取键值对
Object.entries()直接返回键值对数组,遍历的时候可以同时拿到键和对应的值:
for (const [key, item] of Object.entries(data)) { if (item.result && item.result !== "success") { console.log(`不符合条件的项:${key},result值:${item.result}`); } }
4. 递归遍历(处理深层嵌套场景)
如果你的JSON对象有更深的嵌套结构,子对象里也可能存在result属性,可以用递归函数遍历所有层级:
function findNonSuccessItems(obj) { for (const [key, value] of Object.entries(obj)) { if (typeof value === 'object' && value !== null) { // 先检查当前对象的result if (value.result && value.result !== "success") { console.log(`不符合条件的项:${key},result值:${value.result}`); } // 递归处理子对象 findNonSuccessItems(value); } } } findNonSuccessItems(data);
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

