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 jsondata1 = { '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]