Maison >développement back-end >Tutoriel Python >Comment lire et écrire des données au format JSON en Python

Comment lire et écrire des données au format JSON en Python

王林
王林avant
2023-04-24 08:52:141872parcourir

    Introduction aux données au format JSON

    Le nom complet de JSON est "JavaScript Object Notation", traduit par "JavaScript Object Notation" ou "JavaScript Object Notation". Format d’échange de données textuel et ouvert. JSON joue un rôle essentiel dans le domaine du développement Web Si vous souhaitez montrer vos talents dans le domaine du développement Web, vous devez comprendre JSON. En termes simples, Json est un format de texte couramment utilisé pour le stockage de données. JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式。JSON 在 Web 开发领域有着举足轻重的地位,如果您想在 Web 开发领域大展身手的话,就必须了解 JSON。通俗点来说Json是一种文本格式,常用于数据存储。

    基本结构为键: 值,键仅可以为字符串,而值可以是字符串,列表,数字,或者另一些键值对

    下面这段数据很好的展示了不同形式的Json结构:

    {
        "max": 1,
        "1": {
            "user": 825882638,
            "type": "image"
            "title": "超人"
        },
        "a": [
            "芝麻开门",
            {
                "a": 2
            },
            "b"
        ],
        "c": {
            "d": 888
            "g": 888
        }
    }

    注意:所有Json文本最外层都必须有{}

    使用Python读写JSON格式数据

    接下来我们就以上面这个Json文本为样板讲解一下Json文件的解析。

    在Python当中,如果我们要解析Json文件,就必须先导入Python安装时自带的json库,即import json,之后才可以进行json操作。

    1.读取json文件

    下面的代码告诉了我们如何读入一个json文件

    with open("./new.json", "r", encoding="utf-8") as f:
        content = json.load(f)

    json.load是直接从文件读取json文本,而json.loads是读取进行了json编码的文本而非本地文件。

    上述代码即从当前目录下的"new.json"文件当中读入json数据,随后json.load方法会将读入的json文本转换成Python当中的字典存入content变量当中。而在Python中操作JSON格式数据实际上就是操作字典、列表所组成的组合数据类型。

    例如我们现在想要在上面的json文本当中提取最下面的"d"的值(代码中1号位置),可以这么操作val=content[“c”][“d”],这样就可以取到d的值,也就是333了。除此之外上例我们还可以看到[]包裹的列表,如果我们想取到其中的"a"(代码中2号位置)的值,应该这么写:val=content[“a”][1][“a”],此时val的值为2

    2.写入json文件

    with open("./new.json", "w", encoding="utf-8") as f:
        json.dump(data, f, indent=4, ensure_ascii=False)

    上述代码用于向json文件当中写入data数据,其中dump方法拥有很多参数,这里只讲上面代码中的三个,其他的请自行查阅。

    obj:即上述第一个参数,用于传入需要写入Json文件当中的数据。

    fp:即上述第二个参数,用于传入需要写入Json数据的文本指针

    indent:传入Json文件换行缩进量,一般为2或者4。

    ensure_ascii:是否允许Ascii码。若为True

    La structure de base est key: value, la clé ne peut être qu'une string et la valeur peut être une chaîne, une liste, un nombre ou une autre key- paire de valeurs .

    Les données suivantes montrent très bien les différentes formes de structure Json :

    import json, os
    
    class JsonUtils():
        relative_url = "./data/"
        abstract_url = "file:///home/ubuntu/qqbot/data/rpg/"
    
        @staticmethod
        def __preBuildFile(file: str, *default: Union[str, dict]) -> bool:
            """
            判断文件及路径是否存在,若不存在则创建并生成对应文件内容
    
            :param file: 文件路径
            :param default: 默认文件内容
            :return:
            """
            if (not os.path.exists(file)):
                path = os.path.split(file)
                if (not os.path.exists(path[0])):
                    os.mkdir(path[0])
                with open(file, "w", encoding=utf-8") as f:
                    if (default):
                        arg = default[0]
                        if (isinstance(arg, str)):
                            f.write(arg)
                        elif (isinstance(arg, dict)):
                            try:
                                js = json.dumps(arg, indent=4, ensure_ascii=False)
                                f.write(js)
                            except json.JSONEncoder:
                                return False
                        else:
                            f.write(str(arg))
                    else:
                        f.write("")
            return True
                          
        @classmethod
        async def read(cls, filename: str, *default) -> Tuple[dict, bool]:
            """
            读取指定json文件
    
            :param filename: 文件路径
            :param default: 若无此文件,创建该文件时写入的内容
            :return: [读取到的内容, 是否为新创建的文件]
            """
            file_url = cls.relative_url + filename
            if (default):
                res = JsonUtils.__preBuildFile(file_url, default[0])
            else:
                res = JsonUtils.__preBuildFile(file_url)
            with open(file_url, "r", encoding="utf-8") as f:
                content = json.load(f)
            return (content, res)
    
        @classmethod
        async def write(cls, filename: str, data: dict) -> None:
            """
            写入Json数据
            
            :param filename: 文件路径
            :param data: 写入的数据
            :return: 
            """
            file_url = cls.relative_url + filename
            JsonUtils.__preBuildFile(file_url)
            with open(file_url, "w", encoding="utf-8") as f:
                content = json.dumps(data, indent=4, ensure_ascii=False)
                f.write(content)

    Remarque : tous les textes Json doivent avoir {} dans la couche la plus externe🎜🎜Utilisez Python pour lire et écrire des données au format JSON🎜 🎜Ensuite, nous utiliserons le texte Json ci-dessus comme modèle pour expliquer l'analyse des fichiers Json. 🎜🎜En Python, si nous voulons analyser les fichiers Json, nous devons d'abord importer la bibliothèque json fournie avec l'installation de Python, c'est-à-dire importer json, puis nous pouvons effectuer des opérations json. 🎜

    1. Lire le fichier json

    🎜Le code suivant nous indique comment lire un fichier json🎜rrreee
    🎜json.load lit le texte json directement à partir du fichier, tandis que json.loads est Lire json- texte codé au lieu d'un fichier local. 🎜
    🎜Le code ci-dessus lit les données json du fichier "new.json" dans le répertoire actuel, puis la méthode json.load convertira le texte json lu en Python. Le dictionnaire est stocké dans la variable de contenu. L'exploitation de données au format JSON dans Python fonctionne en fait sur des types de données combinés composés de dictionnaires et de listes. 🎜🎜Par exemple, si nous voulons maintenant extraire la valeur du "d" inférieur (position 1 dans le code) du texte json ci-dessus, nous pouvons opérer val=content["c"]["d"] comme ceci . La valeur de d est obtenue, qui est 333. En plus de l'exemple ci-dessus, nous pouvons également voir la liste des packages []. Si nous voulons obtenir la valeur de "a" (position 2 dans le code), nous devons écrire comme ceci : val=content["a" ][ 1]["a"], à ce moment la valeur de val est 2. 🎜

    2. Écrivez le fichier json

    rrreee🎜Le code ci-dessus est utilisé pour écrire des données data dans le fichier json, dans lequel la méthode dump en contient plusieurs. Paramètres Ici, nous ne parlons que de trois des codes ci-dessus, veuillez vérifier les autres par vous-même. 🎜🎜obj : Le premier paramètre ci-dessus est utilisé pour transmettre les données qui doivent être écrites dans le fichier Json. 🎜🎜fp : Le deuxième paramètre mentionné ci-dessus est utilisé pour transmettre le pointeur de texte qui doit être écrit dans les données Json 🎜🎜indent : Transmettre le montant de l'indentation de nouvelle ligne. du fichier Json Généralement 2 ou 4. 🎜🎜ensure_ascii : s'il faut autoriser le code Ascii. S'il est True (par défaut), tous les caractères chinois saisis seront convertis en uXXXX et stockés. 🎜🎜Écrivez un JsonUtils par vous-même🎜🎜Le code vient d'un grand gars sur github. Les commentaires du code donnent des instructions détaillées sur la façon de l'utiliser ! 🎜rrreee

    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!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer