【发布时间】:2017-03-06 16:48:46
【问题描述】:
我知道要将字典转换为字符串或从字符串转换,我使用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_entry)) 确实有效,但 json.loads(str(sample_entry)) 没有。区别似乎在于使用单引号和双引号的地方。我从中接收此字符串的数据源在使用 ' vs " 时不太可能保持一致,因此我想同时考虑两者。
【问题讨论】:
-
“当给定一个表示字典列表的字符串时,这些方法会失败。” 他们会吗?怎么会这样?我刚试过
json.loads(json.dumps(sample_entry)),我没有得到异常或任何东西。我觉得很好。 -
“我收到此字符串的数据源在使用 ' vs "" 时不太可能一致。好的,这更有意义。感谢您的澄清. 你对数据源了解多少?他们用 Python 吗?他们用 json 吗?你能说服他们使用更一致的语法吗?
-
谢谢凯文,你说得对 json.loads(json.dumps(sample_entry)) 工作正常。不幸的是,我的数据源使用的方法向我发送了一个与 json.dumps() 给出的字符串不匹配的字符串。更不幸的是,这不是我要求的一致性。这是一个抓取用户提供的、javascript 格式的数据的 python 应用程序。
-
[ {"type": "test", "topic": "obama", "interval": "daily"}, {"type": "test", "topic": "biden", "interval": "immediate"}, ]如果我尝试验证Invalid JSON: Expecting value: line 4 column 1 (char 128) None [Program finished]并且当我尝试解析[{'type': 'test', 'topic': 'obama', 'interval': 'daily'}, {'type': 'test', 'topic': 'biden', 'interval': 'immediate'}] [Program finished]意味着这个例子是正确的。也许发布不起作用的数据
标签: python json python-3.x