如何移除JSON中locations对象的数字索引并保留原有内容?
解决JSON对象转数组(移除数字索引)的几种方案
这是个非常常见的JSON结构转换需求,根据你使用的场景不同,我整理了几种实用的解决办法:
1. 前端/Node.js环境(JavaScript)
如果是在代码里处理,ES6+的Object.values()方法是最简洁的方案,直接提取对象的所有值组成数组:
// 假设你的原始数据是这样的 const rawData = { "locations": { "0": { "locationNo": "10014", "inventoryLocationNo": "10014" }, "1": { "locationNo": "10499", "inventoryLocationNo": "10499" }, "2": { "locationNo": "110868", "inventoryLocationNo": "110868" } } }; // 一步转换 rawData.locations = Object.values(rawData.locations); // 输出格式化后的JSON console.log(JSON.stringify(rawData, null, 2));
运行后就能得到你想要的数组结构,Object.values()会自动忽略对象的键,只保留值,完美匹配需求。
2. 命令行环境(用jq工具)
如果你需要批量处理JSON文件,jq是处理JSON的神器,一条命令就能搞定:
# 把input.json中的locations转换为数组,输出到output.json jq '.locations = [.locations[]]' input.json > output.json
解释一下:.locations[]会遍历locations对象的所有子项,用[]包裹就变成了数组,再赋值回locations字段,直接得到合法的JSON结构。
3. Python脚本处理
如果用Python做数据处理,借助内置的json模块就能轻松完成:
import json # 读取原始JSON文件 with open('input.json', 'r', encoding='utf-8') as f: data = json.load(f) # 将locations对象转为数组 data['locations'] = list(data['locations'].values()) # 写入格式化后的JSON文件 with open('output.json', 'w', encoding='utf-8') as f: json.dump(data, f, indent=2, ensure_ascii=False)
Python字典的values()方法会返回所有值的集合,转成列表就是JSON数组的形式,最后dump的时候加上indent=2可以让输出更美观。
4. 手动修改(数据量小的情况)
如果你的JSON数据量不大,直接手动修改也是最快的:
- 把
locations后面的{改成[,结尾的}改成] - 删掉所有的
"0":、"1":、"2":这类数字键 - 检查逗号位置,确保每个对象之间只有一个逗号,最后一个对象后面没有逗号
比如修改前:
"locations": { "0": { "locationNo": "10014", "inventoryLocationNo": "10014" }, "1": { "locationNo": "10499", "inventoryLocationNo": "10499" }, "2": { "locationNo": "110868", "inventoryLocationNo": "110868" } }
修改后:
"locations": [ { "locationNo": "10014", "inventoryLocationNo": "10014" }, { "locationNo": "10499", "inventoryLocationNo": "10499" }, { "locationNo": "110868", "inventoryLocationNo": "110868" } ]
内容的提问来源于stack exchange,提问作者Vinu
相关产品推荐
相关产品推荐

