python编程: json模块解析json文件

JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于将数据从一个应用程序传输到另一个应用程序。它基于JavaScript语言的一个子集,但已成为跨编程语言和平台的通用数据格式。

JSON格式的数据在许多场景中都得到广泛应用,如应用程序配置文件,特别是在Web开发中,它常用于API的数据传输和存储、配置文件的格式化以及与前端应用程序之间的数据交换。

1、 json文件的优点

  • 简洁明了:JSON使用简单的语法来表示数据,易于阅读和编写。
  • 跨平台和语言:JSON是一种通用的数据格式,可以在不同的编程语言和操作系统之间进行数据交换。
  • 高效性:JSON数据量相对较小,传输和存储效率高。
  • 易于解析:JSON数据可以很容易地解析为程序可用的数据结构。

2、json数据的组成

JSON数据由键值对组成,JSON表示的对象就是标准的JavaScript语言的对象。它支持的类型,以及对应的python类型如下表所示:

类型

JSON类型

Python类型

对象(Object):表示键值对集合,使用花括号括起来,键和值之间用冒号分隔,键值对之间用逗号分隔。

{}

dict

数组(Array):表示有序的值列表,使用方括号括起来,值之间用逗号分隔。

[]

list

字符串(String):表示文本数据,使用双引号括起来。

“string”

str

数字(Number):表示整数或浮点数。

1234.56

int或float

布尔值(Boolean):表示真或假。

true/false

True/False

空变量

null

None

3、json文件解析

当处理包含结构化数据的JSON格式数据时,Python提供了内置的 json模块,它提供了一组功能强大的工具,用于解析和处理JSON数据。主要提供了四个主要的函数:dump、dumps、load和 loads。这些函数提供了在JSON数据和Python对象之间进行转换和序列化的功能。

(1) 导入json模块

首先,导入 json模块。这个是废话,但一定要说。

import   json

(2) 解析json字符串

json模块提供了 loads()函数,用于将JSON字符串解析为Python对象(通常是字典或列表)。

json_string = '{"name": "张三", "age": 30, "city": "北京"}'
data = json.loads(json_string)
print(data)  # 输出: {'name': '张三', 'age': 30, 'city': '北京'}

在上例中,json_string是包含JSON数据的字符串,json.loads()将其解析为Python对象,并将结果赋值给 data变量。

(3) 解析json文件

如果要从json文件中读取数据,可以使用 json.load()函数。这个在前面的《pyhon文本文件的读取》有描述。

with open('data.json') as f:
    data = json.load(f)
    print(data)

例子中的data.json的内容格式要符合json语法规则。data.json的内容如下:

{"name": "张三", "age": 30, "city": "北京"}

在上例中,我们使用 open()函数打开json文件,并将其传递给 json.load()函数进行解析。解析结果将存储在 data变量中。

(4) 访问解析后的数据

解析JSON后,我们可以通过键或索引访问其中的数据。

print(data['name'])  # 输出: '张三'
print(data['age'])   # 输出: 30

在上例中,使用键来访问解析后的字典中的值。

(5) 将Python对象转换为json

除了解析json,json模块还提供了函数用于将Python对象转换为json字符串。

data = {'name': '张三', 'age': 30, 'city': '北京'}
json_string = json.dumps(data)
print(json_string)  # 输出:  {"name": "\u5f20\u4e09", "age": 30, "city": "\u5317\u4eac"}

在上例中,使用 json.dumps()将Python字典转换为json字符串。

(6) 解析json异常

如果提供的json数据无效,解析过程将引发 JSONDecodeError异常。如:缺少引号或不配对、花括号缺少或不配对、其他不符合json语法规则的情况。

json_string = '{"name": "张三", age: 30, "city": "北京"}'
data = json.loads(json_string)  # 引发JSONDecodeError异常
#JSONDecodeError: Expecting property name enclosed in double quotes

在上例中,json字符串中的 age, 由于缺少引号,导致解析失败,出现错误提示JSONDecodeError: Expecting property name enclosed in double quotes。

如果尝试访问json数据中不存在的键,也将引发 KeyError异常。

print(data['address'])  # 引发KeyError异常

在上例中,json数据中没有对应的 address键,因此访问该键名,就引发异常,出现错误提示 KeyError: 'address'。

4、json文件保存

有时候,业务场景需要将修改或者处理后的json信息保存下来,代码示例如下。

a = {"name": "张三", "age": 30, "city": "北京"}
b = json.dumps(a)
fp = open('new_json.json', 'w')
fp.write(b)
fp.close()

通过json.dumps()把dict降级为字符串,再将字符串写入json文件中。道理就是这样子的。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python是一种非常优秀的编程语言,具有很强的处理数据的能力,它可以轻松读取和解析JSON(JavaScript Object Notation)格式的数据。 Python提供了内置的json模块,通过它可以很方便地解析JSON数据。在Python解析JSON数据的步骤可以分为以下几个步骤: 1. 导入json模块: 在Python中,我们可以通过import语句将json模块引入,以便在代码中使用它,例如: import json 2. 加载JSON数据: Python中的json模块提供了两个方法来加载JSON数据:json.loads和json.load。其中,json.loads用于将JSON数据加载为Python对象,而json.load用于从文件中加载JSON数据。 例如,我们可以使用json.loads方法将JSON数据加载为Python对象: json_str = '{"name": "Python", "age": 10}' json_obj = json.loads(json_str) print(json_obj['name']) # 输出Python 3. 访问JSON数据: 我们可以通过Python对象的下标或者属性来访问JSON数据,例如: print(json_obj['age']) # 输出10 print(json_obj.age) # 报错,因为json_obj不是Python对象 4. 编码JSON数据: 如果我们需要将Python对象编码为JSON字符串,可以使用json.dumps或json.dump方法。其中,json.dumps可以将Python对象转换为JSON字符串,而json.dump可以将Python对象写入文件中。 例如,我们可以使用json.dumps方法将Python对象编码为JSON字符串: python_obj = {'name': 'Python', 'age': 10} json_str = json.dumps(python_obj) print(json_str) # 输出{"name": "Python", "age": 10} 总之,Python可以轻松读取和解析JSON数据。使用json模块,我们可以将JSON数据加载为Python对象,访问JSON数据,以及将Python对象编码为JSON字符串。在实际的数据处理中,Python的这种能力也使得它成为了处理JSON数据的首选语言之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值