【问题标题】:parse str into valid json python将字符串解析为有效的 json python
【发布时间】:2022-08-18 17:17:54
【问题描述】:

我给出了以下输入:

\'family\': \'man: name, woman: name, child: name , grandma: name, grandpa: name\'

其中 \'family\' 是一个键,它的值是一堆其他键值对。如您所知,您无法使用 json() 解析它,因为此字符串不是以 json 格式构造的。我已经尝试了几个小时将此字符串解析为字典/json有效字符串,以便我可以正确使用它并相应地更改名称值。将不胜感激。

  • 你能展示你试图从中创建字典的代码吗?

标签: python json


【解决方案1】:

假设输入作为字典加载,我们希望将family 的值转换为对应的键值对字典。我们可以通过这样的字符串处理来做到这一点:

>> d = {'family': 'man: name, woman: name, child: name , grandma: name, grandpa: name'}
>> d['family'] = { x.split(':')[0] : x.split(':')[1].strip() for x in d['family'].split(', ')}
>>
>> d['family']
>> {'man': 'name','woman': 'name', 'child': 'name', 'grandma': 'name', 'grandpa': 'name'}

我们首先将family的值拆分成key-value字符串,然后我们将每个key-value字符串进一步拆分成新字典列表推导中对应的key-value对。

【讨论】:

    【解决方案2】:

    假设没有键和值包含逗号或冒号,您可以这样做:

    def split_to_dict(string: str) -> dict[str, str]:
        output = {}
        for pair in string.split(','):
            key, value = pair.split(':')
            output[key.strip()] = value.strip()
        return output
    

    像这样称呼它:

    s = 'man: name, woman: name, child: name , grandma: name, grandpa: name'
    d = split_to_dict(s)
    print(d)
    

    给出以下内容:

    {'man': 'name', 'woman': 'name', 'child': 'name', 'grandma': 'name', 'grandpa': 'name'}
    

    出于可读性的目的,我会避免在字典理解中这样做。

    【讨论】:

      【解决方案3】:

      您首先需要将其转换为正确的 json。

      d = {'family': 'man: name, woman: name, child: name , grandma: name, grandpa: name'}
      d['family'] = re.sub("(\w+)", r'"\1"', d['family'])
      # now parse it
      json.loads("{" + d['family'] + "}")
      

      【讨论】:

      • JSON 要求键和值用引号引起来。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多