JSON(全名:JavaScript Object Notation 物件表示法)是一種輕量級的文字資料交換格式,JSON的資料格式其實就是python裡面的字典格式,裡面可以包含方括號括起來的數組,也就是python裡面的列表。
JSON獨立於語言
JSON具有自我描述性,更容易理解
語法格式:{key1:value1, key2:value2,} 鍵值對形式(用冒號分開),對間用逗號連接
簡單案例:JSON 物件
{ "name": "小明", "age": 18}
複雜案例:JSON 陣列
{ "student": [ {"name": "小明", "age": 11}, {"name": "小红","age": 10} ], "classroom": {"class1": "room1", "class2": "room2"}}3、注意事項##1、 json的鍵值對的鍵部分,必須用雙引號
"包,單引號都不行(所以如果在鍵中出現了關鍵字,也被字元化了),而js中物件沒有強制要求(所以在鍵中不允許出現關鍵字)。
{"name":"admin","age":18,},注意看資料結尾部分18的後面的逗號,不允許出現。
正確的json格式如下:
# 格式1:JSON 对象{"name": "admin", "age": 18}# 格式2:JSON 数组{ "student": [ {"name": "小明", "age": 18}, {"name": "小红", "age": 16}, {"name": "小黑", "age": 20} ]}
錯誤的json格式如下:
2、由python物件格式化成為ison字串(dump)
2、數據類型轉換
格式,在資料類型上會有變化,如下表所示:
list, tuple | |
str | |
int, float, int- & float-derived Enums | |
True | |
#False | |
None | |
array | |
#string | |
## number(int) | |
number(real) | |
true | |
false | |
null | |
#3、使用方法 |
將python資料型別轉換為json格式的字串。
|
json.dump(obj, fp) |
#將python資料型別轉換並儲存到son格式的檔案內。
|
json.loads(s) |
#將json格式的字串轉換為python的型別。
|
json.load(fp) |
#從json格式的檔案讀取資料並轉換為python的類型。
|
4、 json.dumps()
语法格式: >>> import json # Python字典 >>> person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True} >>> print(person) {'name': '小明', 'age': 30, 'tel': ['888888', '1351111111'], 'isonly': True} >>> type(person) <class 'dict' # Python字典转换为json字符串 >>> jsonStr = json.dumps(person) >>> print(jsonStr ) {"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true} >>> type(jsonStr) <class 'str'> 从上可以看出json格式和Python格式的区别在于:python格式打印输出是单引号,类型为 使用参数能让JSON字串格式化输出: >>> print(json.dumps(person, sort_keys=True, indent=4, separators=(',', ': '))){ "age": 30, "isonly": true, "name": "\u5c0f\u660e", "tel": [ "888888", "1351111111" ]} 参数解读:
修改分割符类型: >>> print(json.dumps(person, sort_keys=True, indent=4, separators=('!', '-'))){ "age"-30! "isonly"-true! "name"-"\u5c0f\u660e"! "tel"-[ "888888"! "1351111111" ] 文件操作: import json person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}jsonStr = json.dumps(person)with open('test.json', 'w', encoding='utf-8') as f: # 打开文件 f.write(jsonStr) # 在文件里写入转成的json串 查看生成的新文件: 5、json.dump()
语法格式: import json person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}json.dump(person, open('data.json', 'w')) 查看生成的新文件: import json person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}json.dump(person, open('data.json', 'w'), sort_keys=True, indent=4, separators=(',', ': ')) 再次查看文件:
6、json.loads()
语法格式: >>> import json# Python字典>>> person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}>>> print(person){'name': '小明', 'age': 30, 'tel': ['888888', '1351111111'], 'isonly': True}>>> type(person)<class 'dict'# Python字典转换为json字符串>>> jsonStr = json.dumps(person) >>> print(jsonStr ){"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true}>>> type(jsonStr)<class 'str'># json字符串再转换为Python字典>>> python_obj = json.loads(jsonStr)>>> print(python_obj){'name': '小明', 'age': 30, 'tel': ['888888', '1351111111'], 'isonly': True}>>> print(type(python_obj))<class 'dict'># 打印字典的所有key>>> print(python_obj.keys()) dict_keys(['name', 'age', 'tel', 'isonly']) # 打印字典的所有values>>> print(python_obj.values()) dict_values(['小明', 30, ['888888', '1351111111'], True]) 文件操作: import json f = open('data.json', encoding='utf-8')content = f.read() # 使用loads()方法需要先读文件 python_obj = json.loads(content)print(python_obj) 输出结果: 7、json.load()
语法格式: 文件操作: import json python_obj = json.load(open('data.json','r'))print(python_obj)print(type(python_obj)) 输出结果:
8、总结
三、XML文件和JSON文件互转
cmd控制台安装第三方模块: pip install xmltodict 1、XML文件转为JSON文件新建一个 <note date="23/04/2022"> <to>tom</to> <from>mary</from> <msg>love</msg></note> 转换代码实现: import jsonimport xmltodictdef xml_to_json(xml_str): """parse是的xml解析器,参数需要 :param xml_str: xml字符串 :return: json字符串 """ xml_parse = xmltodict.parse(xml_str) # json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。 # dumps()方法的ident=1,格式化json json_str = json.dumps(xml_parse, indent=1) return json_str XML_PATH = './1.xml' # xml文件的路径with open(XML_PATH, 'r') as f: xmlfile = f.read() with open(XML_PATH[:-3] + 'json', 'w') as newfile: newfile.write(xml_to_json(xmlfile)) 输出结果(生成json文件): 2、JSON文件转换为XML文件新建 { "student": { "course": { "name": "math", "score": "90" }, "info": { "sex": "male", "name": "name" }, "stid": "10213" }} 转换代码实现: import xmltodictimport jsondef json_to_xml(python_dict): """xmltodict库的unparse()json转xml :param python_dict: python的字典对象 :return: xml字符串 """ xml_str = xmltodict.unparse(python_dict) return xml_str JSON_PATH = './test.json' # json文件的路径with open(JSON_PATH, 'r') as f: jsonfile = f.read() python_dict = json.loads(jsonfile) # 将json字符串转换为python字典对象 with open(JSON_PATH[:-4] + 'xml', 'w') as newfile: newfile.write(json_to_xml(python_dict)) 输出结果(生成xml文件): |
以上是Python的json標準函式庫怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!