Python JSON 编码

62 投票
7 回答
187315 浏览
提问于 2025-04-15 12:11

我正在尝试在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

我觉得你只是把 dumpsloads 这两个东西搞混了。

>>> 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"}'

撰写回答