【问题标题】:How can I convert a string response to a valid JSON?如何将字符串响应转换为有效的 JSON?
【发布时间】:2021-12-14 09:19:40
【问题描述】:

您好,我正在尝试将字符串响应转换为 python 中的有效 json 对象列表。

value= "{ActionSuccess=True; AdditionalActionsBitMask=0},{ActionSuccess=True; AdditionalActionsBitMask=0}"

我试过json.loads,但我得到了错误 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

我尝试使用正则表达式进行转换,但它只返回第一个对象。

regex = re.compile(r"\b(\w+)=([^=]*)(?=\s\w+=\s*|$)")
diction = dict(regex.findall(value))

结果是{'ActionSuccess': 'True;', 'AdditionalActionsBitMask': '0}'}

【问题讨论】:

    标签: python json


    【解决方案1】:

    我会按照以下方式将您的字符串转换为有效的 JSON:

    import json
    import re
    value= "{ActionSuccess=True; AdditionalActionsBitMask=0},{ActionSuccess=True; AdditionalActionsBitMask=0}"
    valuejson = '[' + re.sub(r'\b','"',value).replace(';',',').replace('=',':') + ']'
    data = json.loads(valuejson)
    print(data)
    

    输出

    [{'ActionSuccess': 'True', 'AdditionalActionsBitMask': '0'}, {'ActionSuccess': 'True', 'AdditionalActionsBitMask': '0'}]
    

    我将" 放置在单词边界的位置(注意\b 的长度为零,因此不会删除任何内容)然后将; 更改为, 并将= 更改为:,最后包含整个字符串进入[] 得到listdicts。请注意,此解决方案是专门针对您显示的示例制定的,因此请仔细测试您的其他用例。

    如果您可以访问有关给您所说响应的文档,请查阅它以了解响应中使用的格式。如果它不是专有的,您可以在PyPI 上找到它的转换器。

    【讨论】:

    • 嗨@Daweo。这解决了问题。唯一的问题是如果你有一个像 IP 地址这样的属性,因为它包含一个点,或者如果你有 ("-","/")。 "AMProductVersion":"4"."18"."2110" 或 "RemediationTime":"08"/"12"/"2021"。它将引发 json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 81 (char 80)。
    【解决方案2】:

    因为你输入了错误的 JSON 字符串,{'ActionSuccess': 'True', 'AdditionalActionsBitMask': '0'}{'ActionSuccess': 'True', 'AdditionalActionsBitMask ': '0'} 应该有他们的钥匙, 试试这个:

    import json
    data = '{\"block1\":{\"ActionSuccess\":\"True\", \"AdditionalActionsBitMask\":\"0\"},\"block2\":{\"ActionSuccess\":\"True\", \"AdditionalActionsBitMask\":\"0\"}}'
    print(json.loads(data))
    

    输出:

    {'block1': {'ActionSuccess': 'True', 'AdditionalActionsBitMask': '0'}, 'block2': {'ActionSuccess': 'True', 'AdditionalActionsBitMask': '0'}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-14
      • 2017-01-17
      • 2022-08-04
      • 2021-12-01
      • 2018-08-29
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      相关资源
      最近更新 更多