Cet article vous apporte des connaissances pertinentes sur python, qui présente principalement des problèmes liés à la bibliothèque standard json, y compris un aperçu de base de JSON, des modules json, des fichiers XML et de la conversion mutuelle de fichiers JSON, etc. Ce qui suit est Jetons un coup d'œil , j'espère que cela aidera tout le monde.
Apprentissage recommandé : Tutoriel vidéo Python
1. Aperçu des bases de JSON
1.
JSON (nom complet : JavaScript Object Notation Object Notation) est un lightweight textdataexchangeformat, JSON Le format de données est en fait le format de dictionnaire en python, qui peut contenir des tableaux entre crochets, qui sont des listes en python.
- JSON est indépendant du langage
- JSON est auto-descriptif et plus facile à comprendre
- JSON est plus petit, rapide et plus facile à analyser que XML
- Crawlers obtiennent souvent des interfaces Données et les données de l'interface sont au format JSON
2. À quoi ressemble JSON ?
Format de syntaxe : {key1:value1, key2:value2,}
Format de paire clé-valeur (séparés par deux points), reliés par des virgules{key1:value1, key2:value2,}
键值对形式(用冒号分开),对间用逗号连接
简单案例:JSON 对象
{
"name": "小明",
"age": 18}
Copier après la connexion
复杂案例:JSON 数组
{
"student":
[
{"name": "小明", "age": 11},
{"name": "小红","age": 10}
],
"classroom": {"class1": "room1", "class2": "room2"}}
Copier après la connexion
3、注意事项
1、json的键值对的键部分,必须用双引号"
包裹,单引号都不行(所以如果在键中出现了关键字,也被字符化了),而js中对象没有强制要求(所以在键中不允许出现关键字)。
2、json的键值对的值部分,不允许出现函数function,undefined,NaN,但是可以有null,js中对象的值中可以出现。
3、json数据结束后,不允许出现没有意义的逗号,如:{"name":"admin","age":18,}
,注意看数据结尾部分18的后面的逗号,不允许出现。
4、json格式总结
正确的json格式如下:
# 格式1:JSON 对象{"name": "admin", "age": 18}# 格式2:JSON 数组{
"student":
[
{"name": "小明", "age": 18},
{"name": "小红", "age": 16},
{"name": "小黑", "age": 20}
]}
Copier après la connexion
错误的json格式如下:
二、json 模块
1、作用
1、使用jsON字符串生成python对象(load)
2、由python对象格式化成为ison字符串(dump)
2、数据类型转换
将数据从Python转换到json
格式,在数据类型上会有变化,如下表所示:
Python |
JSON |
dict |
object |
list, tuple |
array |
str |
string |
int, float, int- & float-derived Enums |
number |
True |
true |
False |
false |
None |
null |
反过来,将json格式转化为python内置类型,如下表所示:
JSON |
Python |
object |
dict |
array |
list |
string |
str |
number(int) |
int |
number(real) |
float |
true |
True |
false |
False |
null |
None |
3、使用方法
json模块的使用其实很简单,对于绝大多数场合下,我们只需要使用下面四个方法就可以了:
方法 |
功能 |
json.dumps(obj) |
将python数据类型转换为json格式的字符串。 |
json.dump(obj, fp) |
将python数据类型转换并保存到son格式的文件内。 |
json.loads(s) |
将json格式的字符串转换为python的类型。 |
json.load(fp) |
Cas simple | : objet JSON
>>> 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>>> jsonStr = json.dumps(person)
>>> print(jsonStr )
{"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true}
>>> type(jsonStr)
<class></class></class>
Copier après la connexion
Copier après la connexion
Cas complexe🎜 : tableau JSON🎜
>>> print(json.dumps(person, sort_keys=True, indent=4, separators=(',', ': '))){
"age": 30,
"isonly": true,
"name": "\u5c0f\u660e",
"tel": [
"888888",
"1351111111"
]}
Copier après la connexion
Copier après la connexion
🎜3. Notes🎜🎜1. La partie 🎜key🎜 de la paire clé-valeur json doit être entourée de guillemets doubles
"
, les guillemets simples ne fonctionneront pas ( donc si un mot-clé apparaît dans la clé, il sera également caractérisé), mais il n'y a pas d'exigence obligatoire pour les objets en js (les mots-clés ne sont donc pas autorisés dans la clé) 🎜🎜2 La partie 🎜value🎜 de la clé json-. La paire de valeurs, Function, undefined et NaN ne sont pas autorisées, mais null est autorisé et peut apparaître dans la valeur de l'objet dans js 🎜🎜3 Une fois les données json terminées, 🎜les virgules dénuées de sens ne sont pas autorisées, telles que : <. code>{" name":"admin","age":18,}, faites attention à la virgule après 18 à la fin des données, ce n'est pas autorisé 🎜🎜4. 🎜🎜🎜Le format json correct est le suivant🎜 :🎜
>>> print(json.dumps(person, sort_keys=True, indent=4, separators=('!', '-'))){
"age"-30! "isonly"-true! "name"-"\u5c0f\u660e"! "tel"-[
"888888"! "1351111111"
]
Copier après la connexion
Copier après la connexion
🎜🎜Le mauvais format json est le suivant🎜:🎜🎜
🎜🎜🎜 2. module json 🎜🎜🎜🎜1. Fonction 🎜🎜🎜1. Utiliser la chaîne jsON pour générer un objet python (chargement) 2 . Formatez l'objet python en chaîne ison (dump)🎜🎜2. Conversion du type de données🎜🎜Convertissez les données du format
Python au format json
. Il y aura des changements dans le type de données, comme indiqué dans le tableau suivant : 🎜
Python |
JSON | 🎜
🎜dict🎜🎜object🎜🎜
🎜list, tuple🎜🎜array🎜🎜
🎜str🎜🎜string🎜🎜
🎜int, float, int- & float-derived Enums🎜🎜number🎜🎜
🎜True🎜🎜true🎜🎜
🎜False🎜🎜false🎜🎜
🎜Aucun🎜🎜null🎜🎜🎜🎜🎜Convertissez à votre tour le format json en types intégrés python, comme indiqué dans le tableau suivant : 🎜
JSON |
Python | 🎜
🎜object🎜🎜dict🎜🎜
🎜array🎜🎜 list🎜🎜
🎜string🎜🎜str🎜🎜🎜number(int)🎜🎜int🎜🎜
🎜number(real)🎜🎜float🎜🎜
🎜true🎜🎜True🎜🎜🎜false🎜🎜False🎜🎜
🎜null 🎜🎜Aucun🎜🎜🎜🎜🎜 3. Comment utiliser 🎜🎜L'utilisation du module json est en fait très simple Pour la plupart des situations, il suffit d'utiliser le. quatre méthodes suivantes : 🎜
Méthode |
Fonction | 🎜
🎜 json.dumps(obj)
🎜🎜convertira le type de données python en chaîne au format json. 🎜🎜
🎜json.dump(obj, fp)
🎜🎜Convertissez le type de données Python et enregistrez-le dans un fichier au format fils. 🎜🎜
🎜json.loads(s)
🎜🎜Convertissez la chaîne au format json en type python. 🎜🎜
🎜json.load(fp)
🎜🎜Lisez les données d'un fichier au format json et convertissez-les en type python. 🎜🎜🎜🎜4、 json.dumps()
将python数据类型转换为json格式的字符串。
语法格式:json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
>>> 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>>> jsonStr = json.dumps(person)
>>> print(jsonStr )
{"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true}
>>> type(jsonStr)
<class></class></class>
Copier après la connexion
Copier après la connexion
从上可以看出json格式和Python格式的区别在于:python格式打印输出是单引号,类型为dict
。而json格式打印输出是双引号,类型为:str
。True
的开头大小写区别。
使用参数能让JSON字串格式化输出:
>>> print(json.dumps(person, sort_keys=True, indent=4, separators=(',', ': '))){
"age": 30,
"isonly": true,
"name": "\u5c0f\u660e",
"tel": [
"888888",
"1351111111"
]}
Copier après la connexion
Copier après la connexion
参数解读:
-
sort_keys
:是否排序
-
indent
:定义缩进距离
-
separators
:是一个元组,定义分隔符的类型
-
skipkeys
:是否允许JSON字串编码字典对象时,字典的key不是字符串类型(默认是不允许)
修改分割符类型:
>>> print(json.dumps(person, sort_keys=True, indent=4, separators=('!', '-'))){
"age"-30! "isonly"-true! "name"-"\u5c0f\u660e"! "tel"-[
"888888"! "1351111111"
]
Copier après la connexion
Copier après la connexion
文件操作:
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串
Copier après la connexion
查看生成的新文件:
5、json.dump()
将python数据类型转换并保存到son格式的文件内。
语法格式:json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
import json
person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}json.dump(person, open('data.json', 'w'))
Copier après la connexion
查看生成的新文件:
使用参数能让JSON字串格式化输出:
import json
person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}json.dump(person, open('data.json', 'w'), sort_keys=True, indent=4, separators=(',', ': '))
Copier après la connexion
再次查看文件:
json.dumps
和json.dump
写入文件的区别:
- dump() 不需要使用
.write()
方法,只需要写那个字典,那个文件即可;而 dumps() 需要使用.write()
方法写入。
- 如果把字典写到文件里面的时候,dump()好用;但是如果不需要操作文件,或需要把内容存储到数据库何excel,则需要使用dumps()先把字典转换成字符串,再写入
6、json.loads()
将json格式的字符串转换为python的类型。
语法格式:json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
>>> 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>>> jsonStr = json.dumps(person) >>> print(jsonStr ){"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true}>>> type(jsonStr)<class># json字符串再转换为Python字典>>> python_obj = json.loads(jsonStr)>>> print(python_obj){'name': '小明', 'age': 30, 'tel': ['888888', '1351111111'], 'isonly': True}>>> print(type(python_obj))<class># 打印字典的所有key>>> print(python_obj.keys()) dict_keys(['name', 'age', 'tel', 'isonly'])
# 打印字典的所有values>>> print(python_obj.values()) dict_values(['小明', 30, ['888888', '1351111111'], True])</class></class></class>
Copier après la connexion
文件操作:
import json
f = open('data.json', encoding='utf-8')content = f.read()
# 使用loads()方法需要先读文件
python_obj = json.loads(content)print(python_obj)
Copier après la connexion
输出结果:
7、json.load()
从json格式的文件中读取数据并转换为python的类型。
语法格式:json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
文件操作:
import json
python_obj = json.load(open('data.json','r'))print(python_obj)print(type(python_obj))
Copier après la connexion
输出结果:
json.load()
和 json.loads()
区别:
8、总结
不管是dump还是load,带s的都是和字符串相关的,不带s的都是和文件相关的
三、XML文件和JSON文件互转
记录工作中常用的一个小技巧
cmd控制台安装第三方模块:
pip install xmltodict
Copier après la connexion
1、XML文件转为JSON文件
新建一个1.xml
文件:
<note>
<to>tom</to>
<from>mary</from>
<msg>love</msg></note>
Copier après la connexion
转换代码实现:
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))
Copier après la connexion
输出结果(生成json文件):
2、JSON文件转换为XML文件
新建test.json
文件:
{
"student": {
"course": {
"name": "math",
"score": "90"
},
"info": {
"sex": "male",
"name": "name"
},
"stid": "10213"
}}
Copier après la connexion
转换代码实现:
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))
Copier après la connexion
输出结果(生成xml文件):
推荐学习:python视频教程
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!