Heim >Backend-Entwicklung >Python-Tutorial >So verwenden Sie die JSON-Standardbibliothek von Python

So verwenden Sie die JSON-Standardbibliothek von Python

PHPz
PHPznach vorne
2023-06-03 12:25:591375Durchsuche

"So

1. Überblick über die JSON-Grundlagen

1. Was ist JSON?

JSON (vollständiger Name: JavaScript Object Notation Object Notation) ist ein leichtes Textdatenaustauschformat. Das Datenformat von JSON ist eigentlich das Wörterbuchformat Python kann in eckigen Klammern eingeschlossene Arrays enthalten, bei denen es sich um Listen in Python handelt.

  • JSON ist sprachunabhängig

  • JSON ist selbstbeschreibend und leichter zu verstehen

    # 🎜 🎜#

  • JSON ist kleiner, schneller und einfacher zu analysieren als XML
  • Crawler erhalten häufig Schnittstellendaten, die im JSON-Format vorliegen # 🎜🎜#
  • 2 Wie sieht JSON aus?

Grammatikformat

: {key1:value1, key2:value2, Schlüssel-Wert-Paarformat (durch Doppelpunkt getrennt), dazwischen Kommas verwenden Paare Verbindung

Einfacher Fall{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中对象没有强制要求(所以在键中不允许出现关键字)。

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}
        ]}

错误的json格式如下

"So

二、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模块的使用其实很简单,对于绝大多数场合下,我们只需要使用下面四个方法就可以了:

>>> 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 &#39;dict&#39;

# Python字典转换为json字符串
>>> jsonStr = json.dumps(person) 
>>> print(jsonStr )
{"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true}
>>> type(jsonStr)
<class &#39;str&#39;>
Komplexer Fall:JSON-Array
>>> print(json.dumps(person, sort_keys=True, indent=4, separators=(&#39;,&#39;, &#39;: &#39;))){
    "age": 30,
    "isonly": true,
    "name": "\u5c0f\u660e",
    "tel": [
        "888888",
        "1351111111"
    ]}
# 🎜🎜#3. Hinweise
方法 功能
json.dumps(obj) 将python数据类型转换为json格式的字符串。
json.dump(obj, fp) 将python数据类型转换并保存到son格式的文件内。
json.loads(s) 将json格式的字符串转换为python的类型。
json.load(fp): JSON-Objekt
#🎜🎜#1. Der Schlüsselteil des JSON-Schlüssel-Wert-Paares muss in doppelte Anführungszeichen gesetzt werden Es wird in den Schlüsselwörtern angezeigt und gekennzeichnet), es gibt jedoch keine zwingenden Anforderungen für Objekte in js (daher sind Schlüsselwörter in Schlüsseln nicht zulässig) #🎜🎜##🎜🎜#2 Der Wertteil des Schlüssel-Wert-Paares von json. Funktionen, undefiniert und NaN sind nicht zulässig, aber #🎜🎜##🎜🎜#3 Nach dem Ende der JSON-Daten sind keine bedeutungslosen Kommas zulässig, z. B.: {"name" :"admin","age":18,, achten Sie auf das Komma nach 18 am Ende der Daten, es darf nicht erscheinen #🎜🎜##🎜🎜#4, JSON-Format. Zusammenfassung #🎜🎜##🎜🎜##🎜🎜#Das richtige JSON-Format ist wie folgt #🎜🎜#: #🎜🎜# #🎜🎜#"So #🎜🎜# #🎜🎜##🎜🎜# 2. JSON-Modul #🎜🎜##🎜🎜##🎜🎜##🎜🎜#1. Funktion #🎜🎜##🎜🎜##🎜🎜#1. Verwendung jsON-String-Generierung Python-Objekt (Laden)#🎜🎜##🎜🎜#2. Formatieren Sie das Python-Objekt in einen Ison-String (Dump)#🎜🎜##🎜🎜#2. Datentypkonvertierung#🎜🎜##🎜🎜# Bei der Konvertierung vom Python- in das JSON-Format kommt es zu Änderungen im Datentyp, wie in der folgenden Tabelle gezeigt: #🎜🎜##🎜🎜##🎜🎜#dict#🎜🎜##🎜🎜#object#🎜🎜##🎜🎜# #🎜🎜#list, tuple#🎜🎜##🎜🎜#array#🎜🎜##🎜🎜##🎜🎜#str#🎜🎜##🎜🎜#string#🎜🎜##🎜 🎜##🎜🎜#int, float, int- und float-abgeleitete Aufzählungen#🎜🎜##🎜🎜#number#🎜🎜##🎜🎜##🎜🎜#True#🎜🎜## 🎜🎜# wahr#🎜🎜##🎜🎜##🎜🎜#Falsch#🎜🎜##🎜🎜#falsch#🎜🎜##🎜🎜##🎜🎜#Keine#🎜🎜## 🎜🎜# null#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Konvertieren Sie wiederum das JSON-Format in in Python integrierte Typen, wie in der folgenden Tabelle gezeigt: #🎜🎜##🎜🎜##🎜🎜#object#🎜 🎜##🎜🎜#dict #🎜🎜##🎜🎜##🎜🎜#array#🎜🎜##🎜🎜#list#🎜🎜##🎜🎜##🎜🎜#string#🎜 🎜##🎜🎜#str #🎜🎜##🎜🎜##🎜🎜#number(int)#🎜🎜##🎜🎜#int#🎜🎜##🎜🎜##🎜🎜# Zahl(real)#🎜🎜 ##🎜🎜#float#🎜🎜##🎜🎜##🎜🎜#true#🎜🎜##🎜🎜#True#🎜🎜##🎜🎜## ?? #🎜🎜##🎜🎜 #3. So verwenden Sie #🎜🎜##🎜🎜#Die Verwendung des JSON-Moduls ist eigentlich sehr einfach. In den meisten Fällen müssen wir nur die folgenden vier Methoden verwenden: #🎜🎜#
Python JSON
JSON Python
#🎜🎜##🎜🎜#json.dumps(obj)#🎜🎜##🎜🎜#Konvertieren Sie den Python-Datentyp in eine JSON-Formatzeichenfolge. #🎜🎜##🎜🎜##🎜🎜#json.dump(obj, fp)#🎜🎜##🎜🎜#Konvertieren und speichern Sie den Python-Datentyp in eine Datei im Son-Format. #🎜🎜##🎜🎜##🎜🎜#json.loads(s)#🎜🎜##🎜🎜#JSON-Formatzeichenfolge in Python-Typ konvertieren. #🎜🎜##🎜🎜##🎜🎜#json.load(fp)#🎜🎜##🎜🎜#Daten aus einer Datei im JSON-Format lesen und in den Python-Typ konvertieren. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#

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)
{&#39;name&#39;: &#39;小明&#39;, &#39;age&#39;: 30, &#39;tel&#39;: [&#39;888888&#39;, &#39;1351111111&#39;], &#39;isonly&#39;: True}
>>> type(person)
<class &#39;dict&#39;

# Python字典转换为json字符串
>>> jsonStr = json.dumps(person) 
>>> print(jsonStr )
{"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true}
>>> type(jsonStr)
<class &#39;str&#39;>

从上可以看出json格式和Python格式的区别在于:python格式打印输出是单引号,类型为dict。而json格式打印输出是双引号,类型为:strTrue的开头大小写区别。

使用参数能让JSON字串格式化输出:

>>> print(json.dumps(person, sort_keys=True, indent=4, separators=(&#39;,&#39;, &#39;: &#39;))){
    "age": 30,
    "isonly": true,
    "name": "\u5c0f\u660e",
    "tel": [
        "888888",
        "1351111111"
    ]}

参数解读

  • sort_keys:是否排序

  • indent:定义缩进距离

  • separators:是一个元组,定义分隔符的类型

  • skipkeys:是否允许JSON字串编码字典对象时,字典的key不是字符串类型(默认是不允许)

修改分割符类型

>>> print(json.dumps(person, sort_keys=True, indent=4, separators=(&#39;!&#39;, &#39;-&#39;))){
    "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(&#39;test.json&#39;, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:  # 打开文件
    f.write(jsonStr)  # 在文件里写入转成的json串

查看生成的新文件:
"So

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(&#39;data.json&#39;, &#39;w&#39;))

查看生成的新文件:
"So
使用参数能让JSON字串格式化输出:

import json

person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}json.dump(person, open(&#39;data.json&#39;, &#39;w&#39;), sort_keys=True, indent=4, separators=(&#39;,&#39;, &#39;: &#39;))

再次查看文件:
"So
json.dumpsjson.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){&#39;name&#39;: &#39;小明&#39;, &#39;age&#39;: 30, &#39;tel&#39;: [&#39;888888&#39;, &#39;1351111111&#39;], &#39;isonly&#39;: True}>>> type(person)<class &#39;dict&#39;# Python字典转换为json字符串>>> jsonStr = json.dumps(person) >>> print(jsonStr ){"name": "\u5c0f\u660e", "age": 30, "tel": ["888888", "1351111111"], "isonly": true}>>> type(jsonStr)<class &#39;str&#39;># json字符串再转换为Python字典>>> python_obj = json.loads(jsonStr)>>> print(python_obj){&#39;name&#39;: &#39;小明&#39;, &#39;age&#39;: 30, &#39;tel&#39;: [&#39;888888&#39;, &#39;1351111111&#39;], &#39;isonly&#39;: True}>>> print(type(python_obj))<class &#39;dict&#39;># 打印字典的所有key>>> print(python_obj.keys())  dict_keys([&#39;name&#39;, &#39;age&#39;, &#39;tel&#39;, &#39;isonly&#39;])

 # 打印字典的所有values>>> print(python_obj.values()) dict_values([&#39;小明&#39;, 30, [&#39;888888&#39;, &#39;1351111111&#39;], True])

文件操作:

import json

f = open(&#39;data.json&#39;, encoding=&#39;utf-8&#39;)content = f.read()  
# 使用loads()方法需要先读文件
python_obj = json.loads(content)print(python_obj)

输出结果:
"So

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(&#39;data.json&#39;,&#39;r&#39;))print(python_obj)print(type(python_obj))

输出结果:
"So

json.load() json.loads() 区别:

  • loads() 传的是json字符串,而 load() 传的是文件对象

  • 使用 loads() 时需要先读取文件在使用,而 load() 则不用

8、总结

不管是dump还是load,带s的都是和字符串相关的,不带s的都是和文件相关的

三、XML文件和JSON文件互转

记录工作中常用的一个小技巧

cmd控制台安装第三方模块

pip install xmltodict

1、XML文件转为JSON文件

新建一个1.xml文件:

<note date="23/04/2022">
	<to>tom</to>
	<from>mary</from>
	<msg>love</msg></note>

"So

转换代码实现

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 = &#39;./1.xml&#39;  # xml文件的路径with open(XML_PATH, &#39;r&#39;) as f:
    xmlfile = f.read()
    with open(XML_PATH[:-3] + &#39;json&#39;, &#39;w&#39;) as newfile:
        newfile.write(xml_to_json(xmlfile))

输出结果(生成json文件):
"So

2、JSON文件转换为XML文件

新建test.json文件:

{
  "student": {
    "course": {
      "name": "math",
      "score": "90"
    },
    "info": {
      "sex": "male",
      "name": "name"
    },
    "stid": "10213"
  }}

"So

转换代码实现:

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 = &#39;./test.json&#39;  # json文件的路径with open(JSON_PATH, &#39;r&#39;) as f:
    jsonfile = f.read()
    python_dict = json.loads(jsonfile)  # 将json字符串转换为python字典对象
    with open(JSON_PATH[:-4] + &#39;xml&#39;, &#39;w&#39;) as newfile:
        newfile.write(json_to_xml(python_dict))

输出结果(生成xml文件):
"So

Methode Funktion

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die JSON-Standardbibliothek von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen