Python 将字符串化的词典列表转换回词典列表

Python 将字符串化的词典列表转换回词典列表,python,json,python-3.x,Python,Json,Python 3.x,我知道要将字典转换为字符串或从字符串转换为字符串,我使用json.loads和json.dumps。但是,当给定一个表示字典列表的字符串时,这些方法将失败。比如说, sample_entry = [ {"type": "test", "topic": "obama", "interval": "daily"}, {"type": "test", "topic": "biden", "interval": "immediate"}, ] 使用str()将其转换为字符串 "[{'t

我知道要将字典转换为字符串或从字符串转换为字符串,我使用
json.loads
json.dumps
。但是,当给定一个表示字典列表的字符串时,这些方法将失败。比如说,

sample_entry = [
    {"type": "test", "topic": "obama", "interval": "daily"},
    {"type": "test", "topic": "biden", "interval": "immediate"},
]
使用
str()
将其转换为字符串

"[{'topic': 'obama', 'interval': 'daily', 'type': 'test'}, {'topic': 'biden', 'interval': 'immediate', 'type': 'test'}]"
有没有一种简单的方法将其转换回字典列表
eval
正是我想要的,但我关心的是在用户提供的字符串上运行它

是否有另一种方法可以在不同的列表长度和不同的空白空间下实现这一点


编辑:虽然json.loads(json.dumps(sample_条目))确实可以工作,但是json.loads(str(sample_条目))不能工作。区别似乎在于使用单引号和双引号的地方。我从中接收此字符串的数据源在使用“vs”时不太可能是一致的,因此我想说明这两者。

格式良好的python数据类型在大多数情况下都可以使用

您可以使用:

根据报告,它:

安全地计算表达式节点或包含Python文本或容器显示的Unicode或Latin-1编码字符串。提供的字符串或节点可能仅包含以下Python文本结构:字符串、数字、元组、列表、dicts、boolean和None

使用str()将其转换为字符串会使我们

这就是您的问题所在。您不应该使用
str
来序列化数据。无法保证生成的字符串能够恢复到原始对象中

不要使用
str()
,而是使用
json.dumps
。我知道你说你试过了,但它不起作用,但它在内置对象上使用时非常健壮,所以我怀疑你可能只是不小心输入了一个错误。你给出的示例dict完全序列化了:

>>> sample_entry = [
...     {"type": "test", "topic": "obama", "interval": "daily"},
...     {"type": "test", "topic": "biden", "interval": "immediate"},
... ]
>>>
>>> s = json.dumps(sample_entry)
>>> print(s)
[{"interval": "daily", "topic": "obama", "type": "test"}, {"interval": "immediate", "topic": "biden", "type": "test"}]
>>>
>>> d = json.loads(s)
>>> d
[{'interval': 'daily', 'topic': 'obama', 'type': 'test'}, {'interval': 'immediate', 'topic': 'biden', 'type': 'test'}]

“当给定一个表示字典列表的字符串时,这些方法会失败。“它们会失败吗?怎么会呢?我只是尝试了
json.loads(json.dumps(sample_entry))
,但没有得到异常或任何东西。我觉得很好。”我从中接收此字符串的数据源在使用“vs”时不太可能一致。好的,这更有意义。谢谢你的澄清。您对数据源了解多少?他们在使用Python吗?他们在使用json吗?你能说服他们使用更一致的语法吗?谢谢Kevin,关于json.loads(json.dumps(sample_entry))工作正常的说法你是对的。不幸的是,数据源使用的方法向我发送的字符串与json.dumps()给出的字符串不匹配。更不幸的是,这方面的一致性不是我的要求。这是一个python应用程序,捕捉用户提供的javascript格式的数据。
[{“type”:“test”,“topic”:“obama”,“interval”:“daily”},{“type”:“test”,“topic”:“biden”,“interval”:“immediate”},]
如果我试图验证
无效的JSON:期望值:第4行第1列(char 128)无[程序完成]
当我尝试解析
[{'type':'test','topic':'obama','interval':'daily'},{'type':'test','topic':'biden','interval':'immediate'}][Program finished]
意味着示例是正确的。可能会发布不起作用的数据
>>> import ast
>>> my_str = "[{'topic': 'obama', 'interval': 'daily', 'type': 'test'}, {'topic': 'biden', 'interval': 'immediate', 'type': 'test'}]"

>>> ast.literal_eval(my_str)
[{'interval': 'daily', 'type': 'test', 'topic': 'obama'}, {'interval': 'immediate', 'type': 'test', 'topic': 'biden'}]
>>> sample_entry = [
...     {"type": "test", "topic": "obama", "interval": "daily"},
...     {"type": "test", "topic": "biden", "interval": "immediate"},
... ]
>>>
>>> s = json.dumps(sample_entry)
>>> print(s)
[{"interval": "daily", "topic": "obama", "type": "test"}, {"interval": "immediate", "topic": "biden", "type": "test"}]
>>>
>>> d = json.loads(s)
>>> d
[{'interval': 'daily', 'topic': 'obama', 'type': 'test'}, {'interval': 'immediate', 'topic': 'biden', 'type': 'test'}]