如何拆分含数组对象的JSON结构并保留其余键值对
实现JSON数组键的拆分并保留其他键值对
这个需求其实挺典型的——把某个数组类型的键拆分成多个独立对象,同时保留其他所有键值不变。我给你用两种常用语言(JavaScript和Python)来实现,你可以直接套用~
JavaScript 实现
先看代码,注释已经写得很清楚了:
function splitJsonByArrayKey(originalObj, targetKey) { // 先拿到要拆分的数组 const arrayToSplit = originalObj[targetKey]; if (!Array.isArray(arrayToSplit)) { throw new Error(`指定的键 ${targetKey} 不是数组类型`); } // 遍历数组,生成每个新对象 return arrayToSplit.map(item => { // 复制原对象的所有键值(用展开运算符避免修改原对象) return { ...originalObj, // 把目标键替换成当前数组元素 [targetKey]: item }; }); } // 测试你的示例 const originalJson = '{"key1": "val1", "key2": "val2", "key3": [{"k1": "v1"}, {"k2": "v2"}]}'; const originalObj = JSON.parse(originalJson); const result = splitJsonByArrayKey(originalObj, 'key3'); // 输出结果 console.log(JSON.stringify(result[0], null, 2)); console.log(JSON.stringify(result[1], null, 2));
运行后你会得到两个符合要求的对象:
{"key1": "val1", "key2": "val2", "key3": {"k1": "v1"}} {"key1": "val1", "key2": "val2", "key3": {"k2": "v2"}}
Python 实现
如果你用Python处理数据,这个写法同样通用:
def split_json_by_array_key(original_obj, target_key): array_to_split = original_obj.get(target_key) if not isinstance(array_to_split, list): raise ValueError(f"指定的键 {target_key} 不是列表类型") result = [] for item in array_to_split: # 复制原字典的所有键值(用字典推导式避免修改原对象) new_obj = {k: v for k, v in original_obj.items()} # 替换目标键的值为当前列表元素 new_obj[target_key] = item result.append(new_obj) return result # 测试示例 original_json = '{"key1": "val1", "key2": "val2", "key3": [{"k1": "v1"}, {"k2": "v2"}]}' import json original_obj = json.loads(original_json) result = split_json_by_array_key(original_obj, 'key3') # 打印结果 print(json.dumps(result[0], indent=2)) print(json.dumps(result[1], indent=2))
关键点说明
- 不管用哪种语言,核心都是复制原对象的所有键值,再替换目标数组键为单个元素
- 代码里都做了类型检查,避免传入非数组/列表的情况报错
- 用了不修改原对象的方式(展开运算符/字典推导式),保证原数据的完整性
内容的提问来源于stack exchange,提问作者u_peerless
相关产品推荐
相关产品推荐

