我已经从如下所示的API接收到json格式的字符串:
cron_restart
试图使其与json.loads一起使用,但出现错误:
string = ' {\n "Ids": ["abc-765"],\n "Type": "Column",\n "Number": "021649015",\n "Code": "02109998000",\n "Text": , \n}'
我认为这是因为最后一个键中缺少值以及附加的尾部逗号。
有没有一种方法可以格式化字符串以使其与json.loads一起使用?
答案 0 :(得分:0)
不做一些假设就不可能。所有这些假设都必须正确才能使算法起作用:
{
}
import json
def fix_json(string):
modifiedLines = []
for line in string.splitlines()[1:-1]:
line = line.strip()
if line.endswith(','):
line = line[:-1].strip()
if line.endswith(':'):
line = line + "null"
modifiedLines.append(line)
return '{\n' + ',\n'.join(modifiedLines) + '\n}'
string = ' {\n "Ids": ["abc-765"],\n "Type": "Column",\n "Number": "021649015",\n "Code": "02109998000",\n "Text": , \n}'
modifiedString = fix_json(string)
jsonData = json.loads(modifiedString)
print(jsonData)
{'Ids': ['abc-765'], 'Type': 'Column', 'Number': '021649015', 'Code': '02109998000', 'Text': None}
答案 1 :(得分:0)
如果知道所需的键,则可以将它们添加到列表中并使用正则表达式在此列表中进行迭代以找到关联的值:
for json_key in json_keys:
val = None
try:
val = re.search(json_key+'": (.*),', string).group(1)
catch AttributeError: # Key does not exist
pass
catch Exception as e:
raise e from None
这些值需要进一步验证/修复(即,从开头和结尾删除多余的“”),但您可以将它们添加到键:值字典中,并将其传递给
import json
new_string = json.dumps(json_dict)