處理json

來源:互聯網
上載者:User

標籤:問題:   說明   www.   .json   value   pre   選擇性參數   沒有   最好   

說明:
#json是一種通用的資料類型,所有的語言都認識。
#k - v {}
#json串就是一個字串,不能根據key-value取值
#json可以轉成字典
#json串就是字串,可放在三引號中
校正json格式的網址:http://www.bejson.com/
那麼json怎麼轉成字典,用到模組json,可以import json
一、JSON 函數1、json.dumps:字典轉成json串(字串)
json.dumps(stus,indent=8,ensure_ascii=False) #將字典轉成json字串 ;indent 控制幾個縮排的;當字典中有中文的時候,需要寫ensure_ascii=False,不然json串裡面不顯示漢字。
2、json.loads:將json串轉成字典1)字典和json互相轉換:
import json  #匯入json模組s = ‘‘‘                      {        "error_code": 0,        "stu_info": [                {                        "id": 309,                        "name": "小白",                        "sex": "男",                        "age": 28,                        "addr": "河南省濟源市北海大道32號",                        "grade": "天蠍座",                        "phone": "18512572946",                        "gold": 100                },                {                        "id": 310,                        "name": "小白",                        "sex": "男",                        "age": 28,                        "addr": "河南省濟源市北海大道32號",                        "grade": "天蠍座",                        "phone": "18516572946",                        "gold": 100                }        ]}‘‘‘res = json.loads(s)   #將json串轉成字典print(res)print(type(res))stus = {‘xiaojun‘:‘123456‘,‘xiaohei‘:‘345346‘}  #一個字典res2 = json.dumps(stus)  #將字典轉成json串print(res2)print(type(res2))
2)字典轉成json串,然後寫入檔案
stus = {‘xiaojun‘:‘123456‘,‘xiaohei‘:‘345346‘,‘海龍‘:‘34535‘}  #一個字典res2 = json.dumps(stus,indent=8,ensure_ascii=False)  #將字典轉成json串print(res2)print(type(res2))with open(‘stus.json‘,‘w‘,encoding=‘utf-8‘) as f:   #檔案的尾碼.json,這樣檔案裡面顯示的好看,有顏色區分。尾碼無所謂    f.write(res2)

檔案中看-實際帶有顏色:

{        "xiaohei": "345346",        "海龍": "34535",        "xiaojun": "123456"}
 3)從檔案中讀取json串,轉成字典

 

with open(‘stus.json‘,‘r‘,encoding=‘utf-8‘)as f:    content = f.read()        #返回字串    user_dict = json.loads(content)      #將json字串轉成字典print(user_dict)

 

 3、json.load()與json.loads()的區別

兩個方法功能類似,選擇性參數也相同,最大的區別在於,json.load方法接受的輸入,即第一個參數,是包含json資料的檔案對象,如open方法的返回對象。

json.loads接受的輸入是json字串,而非檔案對象。

如果說你要操作檔案,可以直接用json.load

舉例:

json.loads()將檔案中的json轉成字典如下:

with open(‘stus.json‘,‘r‘,encoding=‘utf-8‘)as f:    content = f.read()        #返回字串    user_dict = json.loads(content)      #json.loads接受的是字串contentprint(user_dict)

json.load()將檔案中的json轉成字典如下:

with open(‘stus.json‘,‘r‘,encoding=‘utf-8‘)as f:    user_dic = json.load(f)   #json.load接受的是檔案對象    print(user_dic)
4、json.dump()和json.dumps()區別

dump()第一個參數時字典對象,第二個參數是檔案對象,可以直接將轉換後的json資料寫入檔案;dumps的第一個參數是對象字典,其餘都是選擇性參數。

參數記錄如下:

ensure_ascii 預設為True,保證轉換後的json字串中全部是ascii字元,非ascii字元都會被轉義。如果資料中存在中文或其他非ascii字元,最好將ensure_ascii設定為False,保證輸出結果正常。

indent 縮排,預設為None,沒有縮排,設定為正整數時,輸出的格式將按照indent指定的半形空格數縮排,相當實用。

separators 設定分隔字元,預設的分隔字元是(‘,‘, ‘: ‘),如果需要自訂json中的分隔字元,例如調整冒號前後的空格數,可以按照(item_separator, key_separator)的形式設定。

sort_keys 預設為False,設為True時,輸出結果將按照字典中的key排序。

將字典轉成json串寫入檔案操作:

json.dumps()方式

stus = {‘xiaojun‘:‘123456‘,‘xiaohei‘:‘345346‘,‘海龍‘:‘34535‘}f = open(‘stus.json‘,‘w‘,encoding=‘utf-8‘)res = json.dumps(stus,indent=8,ensure_ascii=False)  #轉換成json串f.write(res)   #寫入檔案

json.dump()方式:

stus = {‘xiaojun‘:‘123456‘,‘xiaohei‘:‘345346‘,‘海龍‘:‘34535‘}f = open(‘stus.json‘,‘w‘,encoding=‘utf-8‘)json.dump(stus,f,indent=8,ensure_ascii=False)  #json.dump第一個參數字典(stus),第二個參數檔案對象(f),這個不需要再寫入操作了,直接就寫進去了

以上:當你要把字典寫到檔案裡面,用dump比較好用。如果你不操作檔案,想存到資料庫裡面,不能用dump,還得用dumps.

不帶s都跟檔案相關,帶s的都跟字串相關。

問題:應用json.load/loads/dump/dumps方法時,檔案中的內容如果不是json格式會拋異常如下。

raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

原因:檔案中不是json格式,可用http://www.bejson.com/查詢是不是json格式,其中:檔案是空的不是json格式,1也是json格式,{}是json格式

如果起初檔案就是空的,可以寫個{}這樣就能正確解析json串了

 

處理json

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.