如何将缺失数组结构的JSON数据重构为指定SKU数组格式?
解决格式错误JSON的转换问题
问题分析
你获取的JSON存在两处语法错误:
- 第一个对象(XYZ)的闭合
}与第二个键(YYZ)之间缺失逗号 - 第二个对象中
CurrencyCode字段末尾多了一个冗余逗号
同时需要将顶层键(XYZ、YYZ)转换为每个商品的SKU字段,并整理成指定的数组结构。
解决步骤(Python实现)
- 修复JSON语法错误
- 解析修复后的JSON,遍历键值对生成目标结构
import json # 原始格式错误的JSON字符串 original_json_str = '''{"XYZ": { "PromoURL": "null", "Z_WEEE": 0, "isACD": "false", "ProductCode": "3195", "ProductStatus": "Y5", "ListPrice": "%24885.00", "CurrencyCode": "$" } "YYZ": { "PromoURL": "null", "Z_WEEE": 0, "isACD": "false", "ProductCode": "3195", "ProductStatus": "Y5", "ListPrice": "%24225.00", "CurrencyCode": "$", }''' # 修复语法错误:补全缺失逗号,移除冗余逗号 fixed_json_str = original_json_str.replace('}\n"YYZ"', '},\n"YYZ"').replace('"$",', '"$"') # 解析修复后的JSON parsed_data = json.loads(fixed_json_str) # 生成目标结构 product_list = [] for sku, product_details in parsed_data.items(): product = {"SKU": sku} product.update(product_details) product_list.append(product) # 包装成最终的JSON结构 final_result = {"productList": product_list} # 打印格式化后的结果 print(json.dumps(final_result, indent=4))
输出结果
{ "productList": [ { "SKU": "XYZ", "PromoURL": "null", "Z_WEEE": 0, "isACD": "false", "ProductCode": "3195", "ProductStatus": "Y5", "ListPrice": "%24885.00", "CurrencyCode": "$" }, { "SKU": "YYZ", "PromoURL": "null", "Z_WEEE": 0, "isACD": "false", "ProductCode": "3195", "ProductStatus": "Y5", "ListPrice": "%24225.00", "CurrencyCode": "$" } ] }
补充说明
如果后续遇到更复杂的格式错误JSON,可以使用demjson这类容错性更强的解析库,省去手动修复语法的步骤:
pip install demjson
替换解析部分代码即可:
import demjson parsed_data = demjson.decode(original_json_str)
内容的提问来源于stack exchange,提问作者Andrew Lee
相关产品推荐
相关产品推荐

