json和python字典的转换
一般的py用这个就可以
# coding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
爬虫用这个
# coding: utf-8 这个也得加,他是管理注释的,后面的是管理爬虫的东西
import sys
from billiard.five import reload ######这个注意
reload(sys)
sys.setdefaultencoding( "utf-8" )
在Python标准库的json包中,提供了JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换。
在Python标准库的json包中,提供了JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换。
示例代码如下:
-
#!/usr/bin/python3
-
from json import *
-
if __name__=="__main__":
-
d={}
-
d['a'] =1
-
d['b']=2
-
d[3]='c'
-
d[4]=['k','k1']
-
#将Python dict类型转换成标准Json字符串
-
k=JSONEncoder().encode(d)
-
print(type(k))
-
print(k)
-
#将json字符串转换成Python dict类型
-
json_str='{"a":1,"b":2,"3":"c","4":["k","k1"]}'
-
d=JSONDecoder().decode(json_str)
-
print(type(d))
-
print(d)
运行截图:
需要注意的是:标准Json字符串必须使用双引号(")而不能使用单引号('),否则从字符串转换成dict类型会提示出错。
以上代码在Windows下python 3.3下运行通过。
总结, 将Python 的dict类型转换成标准Json字符串用 encode() 还有用 json.dump()
def encode(self, o):
"""Return a JSON string representation of a Python data structure.
>>> from json.encoder import JSONEncoder
>>> JSONEncoder().encode({"foo": ["bar", "baz"]})
'{"foo": ["bar", "baz"]}'
"""
反之用loads是()和 decode()
------
1、编码解码是怎么一回事?
Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化。
编码是 unicode -> str,相反的,解码就是 str -> unicode。
str形式,也就是字符串形式都是以一定的编码格式存在的,常见的编码格式有utf-8、ASCII、gb2312等等。
str1.decode(‘gb2312’),表示将gb2312编码的字符串str1解码成unicode。
str2.encode(‘utf-8’),表示将unicode字符串str2转换成用utf-8格式编码的字符串。
不同编码格式的字符串之间相互转换编码格式的话,都要先解码成unicode,再编码成其他编码格式的字符串。就拿上面的str1来说,将str1转成utf-8编码的字符串,需要这么做:
str1.decode(‘gb2312’).encode(‘utf-8’)
request.data获取到的是byte字节,byte有decode()方法, 但是如果获取到的是b '' ,空字节,那么用 request.data.decode("utf-8")) ,会报如下错误
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
str有encode(),转换为byte字节
>>> website = 'http://www.cnblogs.com/txw1958/' >>> type(website) <class 'str'> >>> website 'http://www.cnblogs.com/txw1958/' >>>
按utf-8的方式编码,转成bytes
>>> website_bytes_utf8 = website.encode(encoding="utf-8") >>> type(website_bytes_utf8) <class 'bytes'> >>> website_bytes_utf8 b'http://www.cnblogs.com/txw1958/'