将JSON转换为Python字典
我一直在寻找这个问题的答案,但似乎找不到。也许是晚上太晚了,思路不太清晰,所以我来这里请教大家。
我有一段从CouchDB记录中提取的JSON数据:
"{\"description\":\"fdsafsa\",\"order\":\"1\",\"place\":\"22 Plainsman Rd, Mississauga, ON, Canada\",\"lat\":43.5969175,\"lng\":-79.7248744,\"locationDate\":\"03/24/2010\"},{\"description\":\"sadfdsa\",\"order\":\"2\",\"place\":\"50 Dawnridge Trail, Brampton, ON, Canada\",\"lat\":43.7304774,\"lng\":-79.8055435,\"locationDate\":\"03/26/2010\"},"
这些数据存储在一个Python字典中,键名是'locations
',这个字典叫做'my_plan
'。我想把这段CouchDB的数据转换成Python字典,这样我就可以在Django模板中做以下操作:
{% for location in my_plan.locations %}
<tr>
<td>{{ location.place }}</td>
<td>{{ location.locationDate }}</td>
</tr>
{% endfor %}
我找到很多关于把字典转换成JSON的信息,但没有找到关于如何把JSON转换回字典的资料。
6 个回答
2
django.utils.simplejson.loads(someJson)
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。
39
使用
json
模块来加载 JSON 数据。如果你用的是 2.6 之前的版本,可以使用第三方的simplejson
模块,它的用法和json
一模一样。>>> import json >>> s = '{"foo": 6, "bar": [1, 2, 3]}' >>> d = json.loads(s) >>> print d {u'foo': 6, u'bar': [1, 2, 3]}
你的数据不能这样加载,因为它实际上是两个 JSON 对象,中间用逗号隔开,并且最后还有一个多余的逗号。你需要把它们分开,或者想其他办法来处理这个问题。
- 你是从哪里得到这个字符串的?
20
你展示的这个字符串并不是一个JSON格式的对象(相当于Python中的字典),更像是一个没有括号的数组(相当于列表),而且最后还有一个多余的逗号。所以(使用simplejson来保证版本兼容——当然,标准库中的json
在2.6版本也是可以的!):
>>> import simplejson
>>> js = "{\"description\":\"fdsafsa\",\"order\":\"1\",\"place\":\"22 Plainsman Rd, Mississauga, ON, Canada\",\"lat\":43.5969175,\"lng\":-79.7248744,\"locationDate\":\"03/24/2010\"},{\"description\":\"sadfdsa\",\"order\":\"2\",\"place\":\"50 Dawnridge Trail, Brampton, ON, Canada\",\"lat\":43.7304774,\"lng\":-79.8055435,\"locationDate\":\"03/26/2010\"},"
>>> simplejson.loads('[%s]' % js[:-1])
[{'description': 'fdsafsa', 'order': '1', 'place': '22 Plainsman Rd, Mississauga, ON, Canada', 'lat': 43.596917500000004, 'lng': -79.724874400000004, 'locationDate': '03/24/2010'}, {'description': 'sadfdsa', 'order': '2', 'place': '50 Dawnridge Trail, Brampton, ON, Canada', 'lat': 43.730477399999998, 'lng': -79.805543499999999, 'locationDate': '03/26/2010'}]
如果你真的想要一个字典,你需要指定这两个没有名字的项目该怎么处理,也就是说,你想给它们加上什么样的键呢……?