2014-02-28 66 views
0

我有一个unicode字符串应用json.loads(),通过它我如何将unicode字符串转换成一本字典

u"{'1':2, '3':2}" 

现在我该怎样转换完字典一样

{'1':2, '3':2} 

我已经尝试使用

应用re.sub

但仍找不到任何东西。

+0

你想达到什么目的?字符串从哪里来?这看起来像是你以错误的方式序列化了一些东西。 –

+0

你为什么用'JSON'标签标记这个?您没有JSON值。源可能是JSON一次,输出不是。 –

+1

你的数据编码不正确,源JSON字符串应该是''{“1”:2,“3”:2}'',那么''json.loads()'会给你你想要的字典。如果你可以在编码步骤解决这个问题,那真的是更好的方法。 –

回答

2

使用ast.literal_eval()

import ast 

dictionary_object = ast.literal_eval(stringobj) 

这支持字符串,数字,字典,列表,元组和集,但不会执行任何其他Python代码(所以没有可执行代码的风险在这里)。

演示:

>>> import ast 
>>> ast.literal_eval(u"{'1':2, '3':2}") 
{'1': 2, '3': 2} 

然而,很可能你不应该有编码一样,摆在首位的价值。这看起来好像你做:的

obj = {'1': 2, '3': 2} 
json.encode(str(obj)) 

代替

obj = {'1': 2, '3': 2} 
json.encode(obj) 

后者产生一个适当的JSON对象,包含一个Python字典的表示前一个JSON字符串。

+0

不错和谢谢,这真是太好了,实际上我在django中使用它作为TextField(),并且将它渲染为json.loads(),因为它是包含字典的列表的一部分,但无论如何这是很大的帮助 – saurabh

+0

@saurabh:也许你应该考虑在模型中添加一个['JSONField'](https://pypi.python.org/pypi/django-json-field)。 –