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": "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 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 字符串:用于在不同系统之间交换数据(例如,前后端通信、数据存储等)。
相关推荐
凤枭香1 分钟前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
测试杂货铺9 分钟前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
艾派森13 分钟前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
小码的头发丝、39 分钟前
Django中ListView 和 DetailView类的区别
数据库·python·django
Chef_Chen1 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习
千澜空2 小时前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
斯凯利.瑞恩2 小时前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan201903132 小时前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁2 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev2 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理