JSON及Python操作JSON相关

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值
  1. 对象(Object)
  • 表示为一组无序的键值对集合,用花括号 {} 包裹。
  • 键必须是字符串,并且用双引号包裹。
  • 每个键值对之间用逗号 , 分隔。
  • 键和值之间用冒号 : 分隔。

示例:

json 复制代码
{
  "name": "John",
  "age": 30,
  "isStudent": false,
  "address": {
      "city": "New York",
      "zip": "10001"
  }
}
  1. 数组(Array)
  • 表示为一个有序的值集合,用方括号 [] 包裹。
  • 各个值之间用逗号 , 分隔。

示例:

json 复制代码
[
  "apple",
  "banana",
  "cherry"
]

json对象和字符串区别:

特性 JSON 对象 JSON 数组
表示 花括号 {} 包裹 方括号 [] 包裹
数据形式 无序的键值对集合 有序的值的集合
字符串(用双引号包裹) 无键,只有索引
可以是任何JSON数据类型 可以是任何JSON数据类型
使用场景 表示复杂结构化数据 表示有序列表数据
  1. 字符串(String)
  • 表示为一串字符序列,用双引号 " 包裹。
  • 可以包含转义字符,例如 \" 表示双引号,\\ 表示反斜杠,\n 表示换行符等。

示例:

json 复制代码
"Hello, world!"
  1. 数字(Number)
  • 表示为整数或浮点数。
  • 可以是正数、负数,或零。

示例:

json 复制代码
42
3.14
  1. 布尔值(Boolean)

表示为 truefalse

示例:

json 复制代码
true
false
  1. 空值(Null)

表示为空值,使用 null

示例:

json 复制代码
null

2. 示例代码

2.1 读取JSON文件

在Python中,你可以使用json模块读取JSON文件。这是最常见的操作。

python 复制代码
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文件。

python 复制代码
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()来解析它。

python 复制代码
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字符串。

python 复制代码
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可以方便地处理这些复杂数据。

python 复制代码
import json

# 一个包含嵌套结构的JSON
nested_json = {
    "name": "Dave",
    "age": 40,
    "children": [
        {"name": "Amy", "age": 10},
        {"name": "Ben", "age": 8}
    ],
    "contact": {
        "email": "[email protected]",
        "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 intfloat 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 字符串:用于在不同系统之间交换数据(例如,前后端通信、数据存储等)。
相关推荐
巷北夜未央10 分钟前
Python每日一题(14)
开发语言·python·算法
大模型真好玩14 分钟前
理论+代码一文带你深入浅出MCP:人工智能大模型与外部世界交互的革命性突破
人工智能·python·mcp
呵呵哒( ̄▽ ̄)"1 小时前
线性代数:同解(1)
python·线性代数·机器学习
SweetCode1 小时前
裴蜀定理:整数解的奥秘
数据结构·python·线性代数·算法·机器学习
CryptoPP1 小时前
springboot 对接马来西亚数据源API等多个国家的数据源
spring boot·后端·python·金融·区块链
xcLeigh1 小时前
OpenCV从零开始:30天掌握图像处理基础
图像处理·人工智能·python·opencv
大乔乔布斯1 小时前
AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘ 解决方法
python·bash·ssl
明灯L1 小时前
《函数基础与内存机制深度剖析:从 return 语句到各类经典编程题详解》
经验分享·python·算法·链表·经典例题
databook1 小时前
不平衡样本数据的救星:数据再分配策略
python·机器学习·scikit-learn
碳基学AI2 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义免费下载方法
大数据·人工智能·python·gpt·算法·语言模型·集成学习