从无效的json字符串加载python dict

时间:2016-02-29 21:48:32

标签: python json

考虑以下json对象:

> a = {u'service': u"Lulu's Bakery"}

好。现在让我们打印出来:

> s = str(a)
> print s
{u'service': u"Lulu's Bakery"}

问题是:如何巧妙地从该字符串加载json对象?

使用json.loads(s)的简单方法显然不会在这里工作,因为s不是有效的json字符串。 并且多次手动替换的方法似乎没有足够的吸引力,因为例如我更愿意避免在u'su'service'上下文中区分Lulu's部分。< / p>

任何简单的解决方案?

1 个答案:

答案 0 :(得分:1)

使用eval

有些纯粹主义者讨厌使用eval,并且不安全在不受信任的输入上运行(想象一下,如果某些恶人将os.system("rm -rf *")放入带有字符串的文件中。这会删除你的文件)。但这是eval的正确用例。 eval会将您返回的字符串转换为python对象。如果你想要那个python对象的JSON,你可以进一步使用json.dumps

In [1]: s = '''{u'service': u"Lulu's Bakery"}'''

In [2]: s
Out[2]: '{u\'service\': u"Lulu\'s Bakery"}'

In [3]: x = eval(s)

In [4]: x
Out[4]: {u'service': u"Lulu's Bakery"}

In [5]: import json

In [6]: json.dumps(x)
Out[6]: '{"service": "Lulu\'s Bakery"}'