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

如何从嵌套对象的数组中提取指定键值对生成新JSON

问题:访问双层嵌套JSON数据并提取指定字段失败

原始JSON数据

{
    "obj": {
        "obj": [
            {
                "cart": "2762",
                "name": "Joe",
                "testing": "no"
            },
            {
                "cart": "214945",
                "name": "Larry",
                "testing": "yes"
            }
        ],
        "offset": 0,
        "total": 9715
    }
}

需求

提取数组内的每个对象,转换为仅包含name和testing字段的顶层对象,示例结果:

data = [
  { name: 'joe', testing: 'no' },
  { name: 'Larry', testing: 'yes' }
]

尝试的错误代码

const data = original_data.obj.obj.map(({ key, value }) => ({ [key]: value }));
console.log(data);

错误结果

[
    {},
    {}
]

解决方法

错误原因

你在map里用({ key, value })解构遍历到的对象,但map的每一项是完整的对象(比如{ cart: "2762", name: "Joe", testing: "no" }),并非键值对数组,所以解构不到key和value,最终返回空对象。

正确写法1:直接解构指定字段

如果只需要固定保留name和testing,直接解构这两个字段并返回新对象即可,若需要把name转为小写,额外处理即可:

// 基础版(保留原name大小写)
const data = original_data.obj.obj.map(({ name, testing }) => ({ name, testing }));

// 处理name为小写的版本
const data = original_data.obj.obj.map(({ name, testing }) => ({ 
  name: name.toLowerCase(), 
  testing 
}));

正确写法2:动态指定保留字段(适合多字段场景)

如果需要保留的字段较多,可以先定义目标字段数组,再通过reduce构建新对象:

const keepFields = ['name', 'testing'];
const data = original_data.obj.obj.map(item => {
  return keepFields.reduce((result, key) => {
    result[key] = item[key];
    // 可选:处理name小写
    if (key === 'name') {
      result[key] = result[key].toLowerCase();
    }
    return result;
  }, {});
});

最终输出结果

执行上述正确代码后,会得到符合需求的结果:

[
  { name: 'joe', testing: 'no' },
  { name: 'larry', testing: 'yes' }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:46:17