python - 将看起来像列表[字典]的字符串转换为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)
解决方案
您可以使用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}'}
推荐阅读
- c# - C# GetProperties() 不会返回所有这些
- centos7 - 无法在 CentOS 7.5 上的 CWP7 中验证 .well-known/acme-challenge/
- sql - 如何在 PostgreSQL 中将类型化数组作为参数传递?
- c# - 在 swagger ui 的选择下拉菜单中将最新版本设置为默认值
- node.js - passport.js 调用 this.somemethod 抛出 TypeError: Cannot read property 'somemethod'
- circleci - CircleCI 文件未同步到服务器
- php - 是否可以在 GLPI 中制作计算机历史记录更多详细信息
- python - 如何修复按钮形状?
- python - 如何使用 Tabula-py 获取列的标题
- ios - 一次注册多个 Siri 快捷方式