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

如何在Node.js中通过迭代获取JSON值?

解决Node.js中遍历JSON对象获取OK/NOK值的问题

嘿,我完全懂这种困扰——习惯了用data.value直接点取属性,突然要迭代整个对象找特定值确实容易卡壳。咱们一步步拆解这个问题,先从最常见的场景入手,再覆盖可能的嵌套情况~

先明确示例场景

假设你的JSON数据结构大概是这样的(如果实际结构不同,可以调整示例逻辑):

// 单层结构示例
const jsonData = {
  order1: "OK",
  order2: "NOK",
  order3: "OK",
  metadata: "some other data"
};

// 嵌套结构示例(很多时候JSON会有多层嵌套,这也是常见的踩坑点)
const nestedJson = {
  user: {
    profile: "completed",
    verification: "OK"
  },
  orders: {
    recent: {
      id: 123,
      status: "NOK"
    },
    history: [
      { id: 456, status: "OK" },
      { id: 789, status: "NOK" }
    ]
  }
};

基础遍历方法(单层对象)

你试过的Object.keys()、Object.entries()其实都是正确的工具,可能只是之前的用法没到位,咱们重新梳理:

1. 使用Object.keys()遍历

Object.keys()返回对象自身可枚举属性的键数组,然后通过键来访问对应值:

Object.keys(jsonData).forEach(key => {
  const value = jsonData[key];
  // 筛选出OK/NOK值
  if (value === "OK" || value === "NOK") {
    console.log(`键: ${key}, 状态: ${value}`);
  }
});

2. 使用Object.entries()遍历(更便捷)

Object.entries()直接返回[键, 值]的数组对,不用再通过键去取值,代码更简洁:

Object.entries(jsonData).forEach(([key, value]) => {
  if (value === "OK" || value === "NOK") {
    console.log(`键: ${key}, 状态: ${value}`);
  }
});

处理嵌套/数组的情况

如果你的JSON是多层嵌套或者包含数组,普通的单层遍历就找不到深层的OK/NOK了,这时候需要递归遍历:

function findStatus(target) {
  // 先处理数组情况
  if (Array.isArray(target)) {
    target.forEach(item => findStatus(item));
    return;
  }

  // 排除非对象/null的情况
  if (typeof target !== "object" || target === null) {
    return;
  }

  // 遍历对象的键值对
  for (const [key, value] of Object.entries(target)) {
    // 找到目标值直接输出
    if (value === "OK" || value === "NOK") {
      console.log(`找到状态: ${value},所在键: ${key}`);
    } else {
      // 递归遍历嵌套的对象/数组
      findStatus(value);
    }
  }
}

// 测试嵌套结构
findStatus(nestedJson);

可能踩过的坑

  • 忽略嵌套结构:如果你的JSON有多层嵌套,只做单层遍历自然找不到深层的OK/NOK,递归是最通用的解决方式。
  • 错误使用方法:比如用Object.keys()时忘了通过obj[key]取值,或者用Object.entries()时没正确解构[key, value]。
  • 非枚举属性:不过一般JSON解析后的对象属性都是可枚举的,这个情况很少见,如果遇到可以试试Object.getOwnPropertyNames(),它会返回所有自身属性(包括非枚举的)。

内容的提问来源于stack exchange,提问作者Vladimir Jovanović

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:14:48