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

如何使用JavaScript从复杂JSON对象提取值以验证REST响应

问题:从REST服务响应中提取嵌套字段用于验证

原始REST响应格式

{
    "data": [
        {
            "A9001001A23D10A943E48481": {
                "id": "A9001001A23D10A943E48481",
                "type": "WIP",
                "status": "ERROR",
                "message": "could not move document",
                "details": [
                    "No document found with document id 'A9001001A23D10A943E48481'"
                ]
            }
        },
        {
            "A9001001A23D10A945468483": {
                "id": "A9001001A23D10A945468483",
                "type": "WIP",
                "status": "ERROR",
                "message": "could not move document",
                "details": [
                    "No document found with document id 'A9001001A23D10A945468483'"
                ]
            }
        }
    ],
    "error": {}
}

需求

已知文档id,需要提取每个文档的id、type、status、message、details字段值,与预期值对比验证。目前可获取data数组中的单个对象(如data[0]、data[1]),但无法访问其下层嵌套数据,曾尝试用Map处理但未成功:

let myMap = new Map(Object.entries(jsonData.data[0]));

解决方案

1. 直接提取单个文档的嵌套数据

每个data数组元素仅包含一个以文档id为键的对象,可通过Object.keys()获取该键,进而访问嵌套字段:

// 获取第一个文档对象
const firstItem = jsonData.data[0];
// 提取文档id(唯一键)
const docId = Object.keys(firstItem)[0];
// 获取完整的文档数据
const docData = firstItem[docId];

// 访问需要验证的字段
console.log(docData.id);       // 输出:A9001001A23D10A943E48481
console.log(docData.type);     // 输出:WIP
console.log(docData.status);   // 输出:ERROR
console.log(docData.message);  // 输出:could not move document
console.log(docData.details[0]);// 输出:No document found with document id 'A9001001A23D10A943E48481'

2. 遍历所有文档批量验证

如果需要处理data数组中的所有文档,可结合forEach循环批量提取和验证:

jsonData.data.forEach(item => {
  const docId = Object.keys(item)[0];
  const docData = item[docId];
  
  // 示例验证逻辑
  if (docData.type !== "WIP") {
    console.error(`文档${docId}的type字段不符合预期`);
  }
  if (docData.status !== "ERROR") {
    console.error(`文档${docId}的status字段不符合预期`);
  }
  // 其他字段验证可依此类推
});

3. 正确使用Map处理的方式

如果坚持用Map,需通过values()或get()方法获取嵌套对象,而非直接使用Map实例:

const myMap = new Map(Object.entries(jsonData.data[0]));
// 方法1:通过values()获取唯一值
const docData1 = myMap.values().next().value;
// 方法2:已知id的情况下直接get
const docData2 = myMap.get("A9001001A23D10A943E48481");

// 访问字段
console.log(docData1.id);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:25:06