JSON及Python操作JSON相关
Json简介及Python操作Json相关示例。
1. JSON概念及支持的数据类型
1.1 什么是 JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。尽管 JSON 源于 JavaScript,它与编程语言无关,目前被广泛应用于各种编程语言中。
1.2 JSON 支持的数据类型
JSON 支持以下几种基本数据类型:
- 两种特殊类型:数组(array)、对象(object)
- 四种基础类型:字符串(string)、数字(number)、布尔型(boolean)、NULL值
- 对象(Object)
- 表示为一组无序的键值对集合,用花括号
{}
包裹。 - 键必须是字符串,并且用双引号包裹。
- 每个键值对之间用逗号
,
分隔。 - 键和值之间用冒号
:
分隔。
示例:
{
"name": "John",
"age": 30,
"isStudent": false,
"address": {
"city": "New York",
"zip": "10001"
}
}
- 数组(Array)
- 表示为一个有序的值集合,用方括号
[]
包裹。 - 各个值之间用逗号
,
分隔。
示例:
[
"apple",
"banana",
"cherry"
]
json对象和字符串区别:
特性 | JSON 对象 | JSON 数组 |
---|---|---|
表示 | 花括号 {} 包裹 | 方括号 [] 包裹 |
数据形式 | 无序的键值对集合 | 有序的值的集合 |
键 | 字符串(用双引号包裹) | 无键,只有索引 |
值 | 可以是任何JSON数据类型 | 可以是任何JSON数据类型 |
使用场景 | 表示复杂结构化数据 | 表示有序列表数据 |
- 字符串(String)
- 表示为一串字符序列,用双引号
"
包裹。 - 可以包含转义字符,例如
\"
表示双引号,\\
表示反斜杠,\n
表示换行符等。
示例:
"Hello, world!"
- 数字(Number)
- 表示为整数或浮点数。
- 可以是正数、负数,或零。
示例:
42
3.14
- 布尔值(Boolean)
表示为 true
或 false
。
示例:
true
false
- 空值(Null)
表示为空值,使用 null
。
示例:
null
2. 示例代码
2.1 读取JSON文件
在Python中,你可以使用json
模块读取JSON文件。这是最常见的操作。
import json
# 读取JSON文件
with open('data.json', 'r', encoding='utf-8') as file:
data = json.load(file) # 读取并解析JSON数据
# 打印数据
print(data)
这里我们使用json.load()
读取并解析JSON文件,并将结果存储在data
变量中。
2.2 写入JSON文件
你可以使用json.dump()
将Python数据结构写入JSON文件。
import json
# 要写入的Python数据
data = {
"name": "Alice",
"age": 30,
"skills": ["Python", "Data Analysis", "Machine Learning"]
}
# 写入到JSON文件
with open('output.json', 'w', encoding='utf-8') as file:
json.dump(data, file, indent=4) # 使用缩进格式化输出
这个示例使用json.dump()
将字典写入JSON文件。
2.3 解析JSON字符串
有时数据可能以JSON字符串的形式存在。这时你可以使用json.loads()
来解析它。
import json
# 一个JSON字符串
json_str = '{"name": "Bob", "age": 25, "city": "New York"}'
# 解析JSON字符串
data = json.loads(json_str)
print(data) # {'name': 'Bob', 'age': 25, 'city': 'New York'}
2.4 将Python数据转换为JSON字符串
与解析JSON字符串类似,你可以使用json.dumps()
将Python数据转换为JSON字符串。
import json
# 一个Python数据结构
data = {
"name": "Charlie",
"hobbies": ["Reading", "Swimming", "Hiking"]
}
# 将Python数据转换为JSON字符串
json_str = json.dumps(data, indent=4)
print(json_str) # JSON格式的字符串
2.5 处理复杂JSON数据
JSON数据可以包含嵌套的结构。Python可以方便地处理这些复杂数据。
import json
# 一个包含嵌套结构的JSON
nested_json = {
"name": "Dave",
"age": 40,
"children": [
{"name": "Amy", "age": 10},
{"name": "Ben", "age": 8}
],
"contact": {
"email": "dave@example.com",
"phone": "+1234567890"
}
}
# 将Python数据转换为JSON字符串
json_str = json.dumps(nested_json, indent=4)
print(json_str)
在这个示例中,我们创建了一个包含嵌套结构的Python数据,然后将其转换为JSON字符串以进行输出。
3. 总结
3.1 json模块中load、loads、dump、dumps函数的区别总结
函数 | 描述 | 参数 | 返回值 | 用途 |
---|---|---|---|---|
load | 从文件读取JSON数据,并转换为Python对象 | - file object: 包含JSON数据的文件对象 | Python对象 | 从文件中读取并解析JSON数据 |
loads | 从字符串读取JSON数据,并转换为Python对象 | - str: JSON格式的字符串 | Python对象 | 从字符串中读取并解析JSON数据 |
dump | 将Python对象编码为JSON数据并写入文件 | - obj: Python对象 - file object: 文件对象 | 无 | 将Python对象写入文件中 |
dumps | 将Python对象编码为JSON格式的字符串 | - obj: Python对象 | JSON格式的字符串 | 将Python对象转换为JSON字符串 |
3.2 JSON类型与Python类型的对照表
JSON 类型 | Python 类型 | 示例 |
---|---|---|
object | dict | {"name": "John", "age": 30} -> {'name': 'John', 'age': 30} |
array | list | [1, 2, 3] -> [1, 2, 3] |
string | str | "hello" -> 'hello' |
number | int 或 float | 42 -> 42 3.14 -> 3.14 |
true | True | true -> True |
false | False | false -> False |
null | None | null -> None |
3.3 区分Python字典和JSON格式的字符串
1. 语法上区分
- Python 字典: 是一种内存中的数据结构,包含键值对,键可以是任何不可变的数据类型,值可以是任意数据类型。
- JSON: 是一种用于数据交换的字符串格式,键和值都必须是特定类型(键必须是字符串,值可以是字符串、数字、数组、对象、布尔值或 null)。
2. JSON和 Python 字典的使用场景
- Python 字典:用于在 Python 程序内部处理数据。
- JSON 字符串:用于在不同系统之间交换数据(例如,前后端通信、数据存储等)。