如何将无效JSON payload转换为规范的目标JSON格式?
解决无效JSON转换为目标格式的方法
第一步:修复原始无效JSON的语法问题
原始JSON存在两处语法错误,必须先修正才能处理:
Name字段的值Project123缺少双引号,需改为"Name": "Project123"- 存在多个独立顶级JSON对象,不符合JSON单顶级值的规则,需要用数组包裹这些对象。修复后的临时可解析JSON如下:
[ { "Name": "Project123", "time": "2023-10-04T09:54:29.461Z", "data": { "ALAM": [ { "CLEARINGLINEITEM": "000001", "BURP": [ { "CLAIMNO": "52798", "SYSTEM": "Test123" } ] } ] } }, { "ALAM": [ { "CLEARINGLINEITEM": "000002", "BURP": [ { "CLAIMNO": "52798", "SYSTEM": "Test1234" } ] } ] } ]
第二步:提取数据并重组为目标格式
核心逻辑是收集所有ALAM数组内的对象,将它们统一放入data.ACDOCA数组,同时保留第一个对象中的Name和time字段。
代码实现示例(JavaScript)
// 假设修复后的临时JSON已解析为数组tempData const tempData = [ { "Name": "Project123", "time": "2023-10-04T09:54:29.461Z", "data": { "ALAM": [{"CLEARINGLINEITEM": "000001", "BURP": [{"CLAIMNO": "52798", "SYSTEM": "Test123"}]}] } }, {"ALAM": [{"CLEARINGLINEITEM": "000002", "BURP": [{"CLAIMNO": "52798", "SYSTEM": "Test1234"}]}]} ]; // 收集所有ALAM中的对象 const acdocaItems = []; tempData.forEach(item => { if (item.data?.ALAM) { acdocaItems.push(...item.data.ALAM); } else if (item.ALAM) { acdocaItems.push(...item.ALAM); } }); // 构建目标JSON结构 const result = { Name: tempData[0].Name, time: tempData[0].time, data: { ACDOCA: acdocaItems } }; console.log(JSON.stringify(result, null, 2));
运行后即可得到你期望的格式:
{ "Name": "Project123", "time": "2023-10-04T09:54:29.461Z", "data": { "ACDOCA": [ { "CLEARINGLINEITEM": "000001", "BURP": [ { "CLAIMNO": "52798", "SYSTEM": "Test123" } ] }, { "CLEARINGLINEITEM": "000002", "BURP": [ { "CLAIMNO": "52798", "SYSTEM": "Test1234" } ] } ] } }
手动转换步骤(无需代码)
- 给
Project123添加双引号,补全Name字段的语法; - 用
[]包裹所有顶级对象,将其转换为数组; - 从第一个对象中复制
Name和time字段; - 逐个提取每个对象里
ALAM数组的元素,将这些元素全部放入ACDOCA数组; - 组合成目标结构即可。
内容的提问来源于stack exchange,提问作者TwinZaia
相关产品推荐
相关产品推荐

