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類型數據的互相轉換。

示例代碼如下:

  1.  
    #!/usr/bin/python3
  2.  
    from json import *
  3.  
    if __name__=="__main__":
  4.  
    d={}
  5.  
    d[ 'a'] =1
  6.  
    d[ 'b']=2
  7.  
    d[ 3]='c'
  8.  
    d[ 4]=['k','k1']
  9.  
    #將Python dict類型轉換成標准Json字符串
  10.  
    k=JSONEncoder().encode(d)
  11.  
    print(type(k))
  12.  
    print(k)
  13.  
    #將json字符串轉換成Python dict類型
  14.  
    json_str= '{"a":1,"b":2,"3":"c","4":["k","k1"]}'
  15.  
    d=JSONDecoder().decode(json_str)
  16.  
    print(type(d))
  17.  
    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/'

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM