设置要使用的json字符串格式json.loads文件()

2024-04-25 03:53:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我从如下API收到了一个json格式的字符串:


string = ' {\n  "Ids": ["abc-765"],\n  "Type": "Column",\n  "Number": "021649015",\n  "Code": "02109998000",\n  "Text": , \n}'

试着让它工作json.loads文件但是得到错误:

JSONDecodeError: Expecting value: line 6 column 20 (char 162)

我认为这是因为最后一个键中缺少值,以及附加的尾随逗号。你知道吗

有没有一种方法可以格式化字符串以使其工作json.loads?你知道吗


Tags: 文件字符串textapijsonidsnumberstring
2条回答

如果知道所需的键,可以将它们添加到列表中,然后使用regex查找关联的值:

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

这些值需要进一步的验证/修复(即从开始和结束处删除多余的“”),但您可以将它们添加到key:value字典并将其传递给

import json 
new_string = json.dumps(json_dict)

不做一些假设是不可能的。所有这些假设都必须为真,才能使该算法工作:

  • 第一行总是只有{
  • 最后一行总是只有}
  • 所有其他行只包含字典的一个键值对
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}

相关问题 更多 >