【Python】json文件的读取


在这里插入图片描述

1. json简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于将结构化数据进行传输和存储。它基于JavaScript语法,但可以被多种编程语言解析和生成。

json 基于文本,独立于语言的轻量级的数据交换格式

  • 基于文本,是一个文本文件,不能包含图片,音视频等
  • 独立于语言,不是某个语言特有的,每种编程语言都可以使用的
  • 轻量级,相同的数据,和其他格式相比,占用的大小比较小
  • 数据交换格式,后端程序员 给前端的数据 (json,xml,ProtoBuf等)

JSON具有广泛的应用,尤其在Web开发中常用于API的数据交互。在许多编程语言中,都有内置的JSON解析器和生成器,可以方便地处理JSON数据。

2.json的使用规范

JSON使用键值对的方式表示数据,其中键是字符串,值可以是字符串、数字、布尔值、对象、数组或null。

JSON的一些基本规则:

  1. 键和值之间使用冒号(:)分隔。
  2. 键值对之间使用逗号(,)分隔。
  3. 数据包裹在大括号({})中表示一个对象。
  4. 数组使用方括号([])表示,其中的元素可以是任意类型的数据,用逗号分隔。
  5. json中的字符串必须使用双引号 ""
  6. json文件的后缀名是 .json
  7. 一个json文件对应一个对象或数组

3.json文件的书写

一个简单的JSON示例:

{
    "name": "zhangsan",
    "age": 20,
    "city": "BeiJing",
    "hobbies": ["reading", "running", "playing guitar"]
}

在这里插入图片描述
在上面的示例中,有一个包含个人信息的对象。它包含名称、年龄、所在城市、爱好数组
注意:
不能在一个json文件中定义两个json

在这里插入图片描述
如果想要在一个json文件中定义多个json,需要使用数组,如下:
在这里插入图片描述

4.json文件的读取

使用python读取json文件分为三步:

  1. 导包
  2. 读打开文件
  3. 读文件

在此之前,先使用普通文件的读取方式进行读取:

with open("info.json",'r',encoding='UTF-8') as f:
    buf = f.read()
    print(type(buf))
    print(buf)

在这里插入图片描述
此处返回的结果是 字符串,在字符串中获取json中的键值对的信息是比较困难的.

不过在python中的json包中提供了一个json.load()方法

import json

with open("info.json",'r',encoding='UTF-8') as f:
    result = json.load(f)
    print(type(result))
    print(result)

在这里插入图片描述
可以看到返回值类型变成了 dict(字典),python字典中的数据也是键值对,因此要获取对应的数据也就很方便了

  1. 使用方括号操作符[key]:可以使用字典的key作为索引来获取对应的value。
  2. 使用get()方法:get()方法可以接收一个key参数,并返回对应的value。如果key不存在,则可以指定一个默认值作为get()方法的第二个参数,如果不指定,默认值为None。

在这里插入图片描述
在这里插入图片描述

<think>好的,用户想了解如何用Python读取JSON文件。首先,我需要回忆一下Python处理JSON的标准库。记得json模块是用来处理JSON数据的,对吧?对,json模块提供了load和loads方法,其中load用于文件对象,而loads用于字符串。 接下来,应该分步骤解释。第一步肯定是导入json模块。然后,使用open函数打开文件,最好用with语句来确保文件正确关闭。这时候需要注意文件路径是否正确,还有打开模式是读模式'r'。 然后,使用json.load()方法加载文件内容,这样可以直接得到Python的数据结构,比如字典或列表。需要提醒用户注意可能的异常处理,比如文件不存在或者JSON格式错误的情况,这时候应该用try-except块来捕获异常,比如FileNotFoundError和json.JSONDecodeError。 可能用户还需要知道如何处理读取后的数据,比如访问其中的键值对。举个例子,如果JSON是一个对象,里面有'name'和'age'这样的键,可以演示如何获取这些值。 另外,用户可能还会问及JSON数组的情况,这时候数据会被解析成列表。需要说明遍历列表的方法。 还有,可能需要提到json.loads()函数,如果用户已经有JSON字符串,可以用这个来解析。不过当前问题主要是读取文件,所以重点在json.load()。 还要注意编码问题,通常JSON文件是utf-8编码的,所以打开文件时要指定encoding='utf-8',尤其是在Windows系统中可能容易出错。 最后,给出一个完整的示例代码,展示整个流程:导入模块、打开文件、加载数据、处理异常,以及访问数据。可能还需要提到格式化输出,比如用json.dumps()来美化打印,帮助用户查看数据结构。 总结步骤应该是: 1. 导入json模块 2. 使用with open打开文件 3. 使用json.load加载数据 4. 异常处理 5. 访问数据示例 需要确保代码示例正确,语法无误,比如正确的缩进和括号使用。同时,提醒用户注意文件路径的问题,相对路径和绝对路径的区别,可能常见错误比如文件不在当前目录下导致的FileNotFoundError。 可能还要提到JSON的结构,如果是嵌套的数据,如何通过多层键来访问,比如data['user']['address']['city']这样的例子。 总之,要分步骤详细说明,确保用户能一步步跟着操作,并理解每个环节的作用和可能遇到的问题。</think>以下是如何使用 Python 读取 JSON 文件的详细步骤说明: ### 一、基础操作步骤 1. **导入标准库** ```python import json ``` 2. **打开并读取文件** ```python with open('data.json', 'r', encoding='utf-8') as f: data = json.load(f) ``` 3. **访问数据** ```python print(data["key"]) # 访问字典类型数据 print(data[0]) # 访问列表类型数据 ``` ### 二、完整示例代码 ```python import json try: with open('example.json', 'r', encoding='utf-8') as file: json_data = json.load(file) print("完整JSON内容:") print(json.dumps(json_data, indent=4, ensure_ascii=False)) # 示例:访问嵌套数据 if 'users' in json_data: for user in json_data['users']: print(f"用户名:{user['name']}, 年龄:{user['age']}") except FileNotFoundError: print("错误:文件未找到") except json.JSONDecodeError: print("错误:JSON格式解析失败") ``` ### 三、关键要点说明 1. **文件模式** 必须使用 `'r'` 读模式,`encoding='utf-8'` 可解决中文乱码问题 2. **数据结构对应关系** | JSON 类型 | Python 类型 | |---------------|-------------| | object | dict | | array | list | | string | str | | number | int/float | | true/false | bool | | null | None | 3. **异常处理必要性** - `FileNotFoundError`: 文件路径错误或不存在 - `JSONDecodeError`: 文件内容不符合JSON格式规范 ### 四、进阶技巧 1. **解析字符串内容** ```python json_str = '{"name": "张三", "age": 25}' data = json.loads(json_str) ``` 2. **处理复杂结构** 使用递归处理嵌套数据: ```python def process_data(item): if isinstance(item, dict): for k, v in item.items(): print(f"键:{k}") process_data(v) elif isinstance(item, list): for i in item: process_data(i) ``` 3. **大数据量处理** 使用 `ijson` 库流式解析: ```python import ijson with open('large_data.json', 'r') as f: for item in ijson.items(f, 'item'): process(item) ``` ### 五、常见问题解决方案 1. **中文乱码问题** 确保文件打开时指定 `encoding='utf-8'`,输出时设置 `ensure_ascii=False` 2. **路径错误处理** 使用 `os.path` 验证路径: ```python import os if not os.path.exists('data.json'): print("文件路径错误") ``` 3. **格式验证工具** 推荐使用 JSONLint (https://jsonlint.com/) 在线验证JSON格式 通过以上步骤,您可以安全高效地完成 JSON 文件读取和基础数据处理。建议在正式项目中始终添加异常处理逻辑,并针对具体数据结构编写相应的访问代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比奇堡的天没有云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值