python模塊----json
一、概念
序列化(Serialization):將對象的狀態信息轉換為可以存儲或可以通過網路傳輸的過程,傳輸的格式可以是JSON,XML等。反序列化就是從存儲區域(JSON,XML)讀取反序列化對象的狀態,重新創建該對象。
JSON(Java Script Object Notation):一種輕量級數據交互格式,相對於XML而言更簡單,也易於閱讀和編寫,機器也方便解析和生成,Json是JavaScript中的一個子集。
在python中,有專門處理json格式的模塊—— json 和 picle模塊
Json模塊提供了四個方法: dumps、dump、loads、load
pickle模塊也提供了四個功能:dumps、dump、loads、load
1、json字元串轉為字典
json.load / json.loads
兩個方法功能類似,可選參數也相同,最大的區別在於,json.load方法接受的輸入,即第一個參數,是包含json數據的文件對象,如open方法的返回對象,json.loads接受的輸入是json字元串,而非文件對象。從輸入類型的區別也可以看出兩者的使用場合。可選參數包括是否需要轉換整型、浮點型等數值的參數,還有一些複雜的功能,暫時沒有用到,以後有機會再了解。2、字典轉換為json
json.dump / json.dumps對應於load和loads,dump的第一個參數是對象字典,第二個參數是文件對象,可以直接將轉換後的json數據寫入文件,dumps的第一個參數是對象字典,其餘都是可選參數。dump和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排序。1、json字元串轉為字典>>> import json>>> a = {}>>> a[1] = 2>>> a[ad] = ertwer>>> a[02] = oierte>>> a[2] = [1, a]>>> a[non_ascii] = "青團 》 熊貓 ?">>> a[ss] = a.copy()>>> print(json.dumps(a)) # 默認參數輸出,無縮進,中文字元都被轉義{"2": [1, "a"], "02": "oierte", "ss": {"ad": "ertwer", "2": [1, "a"], "02": "oierte", "1": 2, "non_ascii": "u9752u56e2 u300b u718au732b uff1f"}, "1": 2, "ad": "ertwer", "non_ascii": "u9752u56e2 u300b u718au732b uff1f"}>>> >>> print(json.dumps(a, ensure_ascii=False, indent=4)) # 四空格縮進,中文字元全部正常{ "2": [ 1, "a" ], "02": "oierte", "ss": { "ad": "ertwer", "2": [ 1, "a" ], "02": "oierte", "1": 2, "non_ascii": "青團 》 熊貓 ?" }, "1": 2, "ad": "ertwer", "non_ascii": "青團 》 熊貓 ?"}>>>
python json文件遍歷所有key、value 及替換key對於的value
import json#json文件發送形式SendRegisterVerificationCodejson_txt = """{ "header":{ "funcNo": "IF010002", "opStation": "11.11.1.1", "appId": "aaaaaa", "deviceId": "kk", "ver":"wx-1.0", "channel": "4" }, "payload": { "mobileTel": "13817120001" }}"""date_json = json.loads(SendRegisterVerificationCodejson_txt)print(date_json)print("*"*10)# 發送時,每次需要註冊新的手機號碼,就需要json每次提示mobileTel的value進行發送#遍歷json文件所有的key對應的valuedic ={}def json_txt(dic_json): if isinstance(dic_json,dict): #判斷是否是字典類型isinstance 返回True false for key in dic_json: if isinstance(dic_json[key],dict):#如果dic_json[key]依舊是字典類型 print("****key--:%s value--: %s"%(key,dic_json[key])) json_txt(dic_json[key]) dic[key] = dic_json[key] else: print("****key--:%s value--: %s"%(key,dic_json[key])) dic[key] = dic_json[key] json_txt(date_json)print("dic ---: "+str(dic))
推薦閱讀:
※靜覓博主:Python爬蟲學習系列教程
※從零開始的python世界的闖蕩之視頻學習篇 第十九話 網路編程---<Three>
※用Python代碼來理解LinearRegression
※數據預處理中的數據編碼問題|python數據挖掘思考筆記(2)
※Python-計算機科學導論(Udacity) 第2課:怎樣重複(update:2017/1/22)