Python JSON 编码
我正在尝试在Python中将数据编码为JSON,但遇到了一些麻烦。我觉得问题可能只是个误解。
我对Python还比较陌生,也没有真正熟悉各种Python的数据类型,所以这很可能是让我困惑的原因。
目前我在声明一个列表,然后循环遍历另一个列表,并把一个列表添加到另一个列表里面:
import simplejson, json
data = [['apple', 'cat'], ['banana', 'dog'], ['pear', 'fish']]
x = simplejson.loads(data)
# >>> typeError: expected string or buffer..
x = simplejson.dumps(stream)
# >>> [["apple", "cat"], ["banana", "dog"], ["pear", "fish"]]
# - shouldn't JSON encoded strings be like: {{"apple":{"cat"},{"banana":"dog"}}
所以我可能是:
- 不理解JSON的语法
- 不理解Python的JSON模块
- 使用了不合适的数据类型。
7 个回答
18
在 simplejson
(或者在 Python 2.6 及之后的版本中的 json
库)里,loads
这个函数可以把一个 JSON 字符串转换成 Python 的数据结构,而 dumps
则是把 Python 的数据结构转换成 JSON 字符串。JSON 字符串不仅可以表示 Javascript 对象,还可以表示数组,而 Python 的列表对应的就是 JSON 字符串中的数组。
如果你想得到一个像这样的 JSON 字符串:
{"apple":"cat", "banana":"dog"}
那么你传给 json.dumps
的 Python 对象可以是:
dict(apple="cat", banana="dog")
不过,这个 JSON 字符串在语法上也是有效的 Python 语法,表示同样的 dict
。不过我觉得你所期待的那个特定字符串可能是无效的 JSON 语法。
29
我觉得你只是把 dumps 和 loads 这两个东西搞混了。
>>> import json
>>> data = [['apple', 'cat'], ['banana', 'dog'], ['pear', 'fish']]
第一个函数会把它的数据参数变成一个(用JSON编码的)字符串返回:
>>> encoded_str = json.dumps( data )
>>> encoded_str
'[["apple", "cat"], ["banana", "dog"], ["pear", "fish"]]'
第二个函数则是反过来,它会把传入的(用JSON编码的)字符串参数转换成对应的数据返回:
>>> decoded_data = json.loads( encoded_str )
>>> decoded_data
[[u'apple', u'cat'], [u'banana', u'dog'], [u'pear', u'fish']]
>>> decoded_data == data
True
80
在Python中,lists
(列表)会转换成JSON中的arrays
(数组)。这意味着你得到的是一个完全有效的JSON字符串,可以在JavaScript应用中使用。如果你想得到你所期望的结果,你需要使用dict
(字典):
>>> json.dumps({'apple': 'cat', 'banana':'dog', 'pear':'fish'})
'{"pear": "fish", "apple": "cat", "banana": "dog"}'