>  기사  >  백엔드 개발  >  Python에서 JSON 형식 데이터를 읽고 쓰는 방법

Python에서 JSON 형식 데이터를 읽고 쓰는 방법

王林
王林앞으로
2023-04-24 08:52:141805검색

    JSON 형식 데이터 소개

    JSON의 전체 이름은 "JavaScript Object Notation"이며, "JavaScript Object Notation" 또는 "JavaScript Object Notation"으로 번역됩니다. 텍스트 기반의 개방형 데이터 교환 형식입니다. JSON은 웹 개발 분야에서 중요한 역할을 합니다. 웹 개발 분야에서 자신의 재능을 보여주고 싶다면 JSON을 이해해야 합니다. 일반인의 관점에서 보면 Json은 데이터 저장에 일반적으로 사용되는 텍스트 형식입니다. 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

    기본 구조는 키: 값이고, 키는 문자열만 가능하며, 값은 문자열, 목록, 숫자 또는 기타 키일 수 있습니다. 값 쌍 .

    다음 데이터는 다양한 형태의 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)

    참고: 모든 Json 텍스트는 가장 바깥쪽 레이어에 {}가 있어야 합니다.🎜🎜Python을 사용하여 JSON 형식 데이터를 읽고 쓰세요🎜 🎜다음으로, 위의 Json 텍스트를 모델로 삼아 Json 파일의 파싱을 설명하겠습니다. 🎜🎜Python에서 Json 파일을 구문 분석하려면 먼저 Python 설치와 함께 제공되는 json 라이브러리, 즉 import json을 가져와야 합니다. json 작업을 수행합니다. 🎜

    1. json 파일 읽기

    🎜다음 코드는 json 파일을 읽는 방법을 알려줍니다.🎜rrreee
    🎜json.load는 파일에서 직접 json 텍스트를 읽는 반면, json.loads는 Read json-입니다. 로컬 파일 대신 인코딩된 텍스트. 🎜
    🎜위 코드는 현재 디렉터리의 "new.json" 파일에서 json 데이터를 읽은 다음 json.load 메서드가 읽은 json 텍스트를 Python으로 변환합니다. 사전은 다음과 같습니다. 콘텐츠 변수에 저장됩니다. Python에서 JSON 형식의 데이터를 작업하는 것은 실제로 사전과 목록으로 구성된 결합된 데이터 유형을 대상으로 작업하는 것입니다. 🎜🎜예를 들어, 이제 위의 json 텍스트에서 하단 "d"(코드의 위치 1) 값을 추출하려는 경우 다음과 같이 val=content["c"]["d"]를 작동할 수 있습니다. . d 값이 얻어지며 이는 333입니다. 위의 예 외에도 [] 패키지 목록을 볼 수 있습니다. "a"(코드의 위치 2) 값을 얻으려면 다음과 같이 작성해야 합니다: val=content["a" ][ 1]["a"], 이때 val 값은 2입니다. 🎜

    2. json 파일 쓰기

    rrreee🎜위 코드는 json 파일에 data 데이터를 쓰는 데 사용됩니다. 여기서는 위의 코드 중 3개에 대해서만 설명합니다. 나머지는 직접 확인하세요. 🎜🎜obj: 위의 첫 번째 매개변수는 Json 파일에 작성해야 하는 데이터를 전달하는 데 사용됩니다. 🎜🎜fp: 위에서 언급한 두 번째 매개변수는 Json 데이터에 작성해야 하는 텍스트 포인터를 전달하는 데 사용됩니다. 🎜🎜indent: 줄 바꿈 들여쓰기 양을 전달합니다. 일반적으로 2개 또는 4개입니다. 🎜🎜ensure_ascii: Ascii 코드 허용 여부. True(기본값)인 경우 입력된 모든 한자는 uXXXX로 변환되어 저장됩니다. 🎜🎜JsonUtils를 직접 작성하세요🎜🎜코드는 github의 유명인이 제공한 것입니다. 코드 주석은 사용 방법에 대한 자세한 지침을 제공합니다! 🎜아아아아

    위 내용은 Python에서 JSON 형식 데이터를 읽고 쓰는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제