JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成。
以上是網上對json的解釋,其實只要記住是一種輕量的數據交換格式就可以了,確實方便,可以把數據寫入文件中,也可將數據當做字符串使用,但需要注意的是:
1.字符串輸入json時,對元素需要使用雙引號,單引號容易出錯 2.數據寫入文件時,需要注意圓括號,也叫小括號,使用json.dump()默認會將有序排列轉化為列表存入json文件,所以如果你的數據中有元組的話需要注意這一點
3. json 字符串內部的字典、列表中的元素,如果是字符串的話,必須用雙引號
當然,最重要的還是需要先導入json模塊:
import json
字符串解析:
json.dumps() #編碼:把一個Python對象編碼轉換成Json字符串 json.loads() #解碼:把Json格式字符串解碼轉換成Python對象
栗子:
add_contect_str=‘{"backend": "www.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 3000}}’ add_contect=json.loads(add_contect_str) search_info=add_contect['backend'] weight=add_contect['record']['weight'] server=add_contect['record']['server'] maxconn=add_contect['record']['maxconn']
文件解析:
文件內容:
{ "汽車": { "BMW X3": { "price": 499999, "stock": 399, "belong": "汽車" }, "PASST": { "price": 299999, "stock": 297, "belong": "汽車" }, "Tesla Model S": { "price": 799999, "stock": 3000, "belong": "汽車" }, "Porsche 911": { "price": 2999999, "stock": 594, "belong": "汽車" } }, "手機": { "錘子2(這特么真是手機)": { "price": 998, "stock": 2994, "belong": "手機" }, "華為Mate": { "price": 2999, "stock": 5996, "belong": "手機" }, "Iphone": { "price": 5888, "stock": 2998, "belong": "手機" }, "XiaoMi 4": { "price": 1999, "stock": 5396, "belong": "手機" } }, "服裝": { "小白鞋": { "price": 900, "stock": 5964, "belong": "服裝" }, "T恤": { "price": 300, "stock": 892, "belong": "服裝" }, "驢牌腰帶": { "price": 9999, "stock": 2999, "belong": "服裝" }, "Nudie牛仔褲": { "price": 699, "stock": 3978, "belong": "服裝" } }, "電腦": { "Mac Air": { "price": 6999, "stock": 6002, "belong": "電腦" }, "Mac pro": { "price": 9999, "stock": 3995, "belong": "電腦" }, "IBM X240": { "price": 6999, "stock": 3003, "belong": "電腦" }, "Surface Book": { "price": 8999, "stock": 3020, "belong": "電腦" } }, "家電": { "洗衣機": { "price": 999, "stock": 597, "belong": "家電" }, "彩電": { "price": 5000, "stock": 398, "belong": "家電" }, "微波爐": { "price": 800, "stock": 2995, "belong": "家電" }, "冰箱": { "price": 3000, "stock": 300, "belong": "家電" }, "熱水器": { "price": 600, "stock": 900, "belong": "家電" } } }
解析:
user_info=json.load(open('user_info','r')) #讀數據 json.dump(goods,open('goods_info','w'),ensure_ascii=False,indent=1) #寫入數據
其中,ensure_ascii=False表示不轉編碼,如果數據中有中文,沒有ensure_ascii參數時,會轉為亂碼。indent為縮進,讓數據看起來更有序,優雅的裝逼法則。
排序:sort_keys=True,排序使數據看起來更有序,雖然字典的是無序的,然並卵。。。
import json data1 = {'b':789,'c':456,'a':123} data2 = {'a':123,'b':789,'c':456} d1 = json.dumps(data1,sort_keys=True) d2 = json.dumps(data2) d3 = json.dumps(data2,sort_keys=True) print(d1) print(d2) print(d3) print(d1==d2)
結果:
{"a": 123, "b": 789, "c": 456} {"c": 456, "b": 789, "a": 123} {"a": 123, "b": 789, "c": 456} False [Finished in 0.1s]