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

如何使用JSONPath一次性从嵌套数组提取指定键的对象?

使用jsonpath从嵌套数组中提取指定字段的对象

问题场景

需要从给定的嵌套对象数组中,一次性提取每个元素里payload.data下的humidity和temperature字段,组合成新的对象数组,避免多次查询。

示例数据

[
  {
    "payload": {
      "data": {
        "battery": {
          "name": "Battery",
          "value": 45.95860848091411,
          "units": "%",
          "precision": 0
        },
        "humidity": {
          "name": "Humidity",
          "value": 27.84230269716663,
          "units": "%",
          "precision": 2
        },
        "temperature": {
          "name": "Temperature",
          "value": 4.3758105786304675,
          "units": "°",
          "precision": 2
        }
      },
      "timeStamp": 1657356781,
      "deviceId": "172849"
    },
    "timeStamp": "2022-07-09T07:53:00.000Z"
  },
  {
    "payload": {
      "data": {
        "battery": {
          "name": "Battery",
          "value": 15.088388240727735,
          "units": "%",
          "precision": 0
        },
        "humidity": {
          "name": "Humidity",
          "value": 55.695616989217875,
          "units": "%",
          "precision": 2
        },
        "temperature": {
          "name": "Temperature",
          "value": 22.08980374920423,
          "units": "°",
          "precision": 2
        }
      },
      "timeStamp": 1657356840,
      "deviceId": "172849"
    },
    "timeStamp": "2022-07-09T07:55:59.000Z"
  }
]

期望结果

[
  {
    "humidity": {
      "name": "Humidity",
      "value": 27.84230269716663,
      "units": "%",
      "precision": 2
    },
    "temperature": {
      "name": "Temperature",
      "value": 4.3758105786304675,
      "units": "°",
      "precision": 2
    }
  },
  {
    "humidity": {
      "name": "Humidity",
      "value": 55.695616989217875,
      "units": "%",
      "precision": 2
    },
    "temperature": {
      "name": "Temperature",
      "value": 22.08980374920423,
      "units": "°",
      "precision": 2
    }
  }
]

解决方案

jsonpath本身擅长匹配节点,结合数组的map方法可以一次性完成提取和转换:

const jp = require('jsonpath');

// 假设data是你的示例数据数组
const result = jp.query(data, '$..payload.data').map(item => ({
  humidity: item.humidity,
  temperature: item.temperature
}));

说明

  1. $..payload.data 这个jsonpath表达式会匹配所有层级下的payload.data对象,返回包含所有目标data对象的数组;
  2. 用map遍历每个data对象,只保留humidity和temperature字段,直接生成符合要求的新对象数组;
  3. 你之前尝试的$..payload.data['humidity']['temperature']错误原因是:humidity和temperature是同级字段,并非嵌套关系,该表达式试图从humidity对象里查找temperature属性,自然无法匹配结果。

内容的提问来源于stack exchange,提问作者pb46

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:57:24