如何为类JSON结构字符串的数组元素添加双引号以实现合法JSON转换
类JSON字符串数组缺引号的Python修复方案
核心通过正则表达式实现无损替换,不会修改已被双引号包裹的键名、固定字段值,仅处理数组内的未包裹元素和空值:
import re import json # 原始待转换字符串 to_json = ''' { "Element1": { "ID": "ID321", "Data a": [elm1, elem2, 1, 1, , 2, , 3, 354, , NCA, x] }, "Element2": { "ID": "ID421", "Data a": [elm1, elem2, 1, 1, , 2, , 3, 354, , NCA, x], "Data b": [elm1, elem2, 3, 4, , 5, , 3, 354, , CAA, x, y, z, , ] }, "Element3": { "ID": "ID512", "Data a": [elm1, elem2, elm3, 2, 2, , 2, , 3, 54, , ABC, x, y, z, w, , ] } } ''' # 第一步:处理数组中的空值,将空位置替换为空格字符串 fixed_str = re.sub(r',\s*,', ', " ",', to_json) fixed_str = re.sub(r'\[,\s*', '[" ", ', fixed_str) fixed_str = re.sub(r'\s*,\s*]', ', " "]', fixed_str) # 第二步:为数组中所有未被双引号包裹的元素添加双引号 fixed_str = re.sub(r'(?<=[\[,]\s*)([^,"\]]+?)(?=\s*[,|\]])', r'"\1"', fixed_str) # 直接转换为JSON对象 json_data = json.loads(fixed_str) # 测试输出验证 print(json_data["Element2"]["Data b"])
- 正则逻辑自动过滤已用双引号包裹的内容,不会修改原有键名、ID字段等合法JSON部分
- 空值默认替换为
" ",如果需要替换为null等其他值,修改第一步替换的" "内容即可 - 处理后的字符串可直接通过
json.loads正常解析,无需额外适配
内容的提问来源于stack exchange,提问作者BadRobot
相关产品推荐
相关产品推荐

