首页 > 解决方案 > 将看起来像列表[字典]的字符串转换为python列表[字典]类型数据

问题描述

我正在尝试将这个看起来很像包含字典的列表的字符串数据转换为所述数据类型的实际数据或我可以检索信息的任何其他形式。为了将其放入多行以便更好地查看,字符串如下所示。

[
    {"type": "account", "data": "{\bid\:8,\acc_num\:135}"},
    {"type": "card", "data": "{\card_num\:142}"}
]

我试过常见的json.loads(a, strict=False)json.loads(a)但它有如下错误。我希望将"{\bid\:8,\acc_num\:135}"部分集中到一个字符串中(作为 key 的值data),但也许它没有发生......认为它可能是\导致这个问题的字符串中的,但a=a.replace('\','') 也无效(SyntaxError: EOL while scanning string literal错误)。

Traceback (most recent call last):
File "a.py", line 55, in <module>
    a=json.loads(a)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Invalid control character at: line 1 column 32 (char 31)

标签: pythonjsonstringpython-3.x

解决方案


您可以使用ast.literal_eval()

>>> s = """[
...     {"type": "account", "data": "{\bid\:8,\acc_num\:135}"},
...     {"type": "card", "data": "{\card_num\:142}"}
... ]"""
>>> import ast
>>> x = ast.literal_eval(s)
>>> x
[{'type': 'account', 'data': '{\x08id\\:8,\x07cc_num\\:135}'}, {'type': 'card', 'data': '{\\card_num\\:142}'}]
>>> x[0]
{'type': 'account', 'data': '{\x08id\\:8,\x07cc_num\\:135}'}

推荐阅读