You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:15:07