【python】Json库学习

1、说明

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集,采用完全独立于语言的文本格式来存储和表示数据。

而Python Json库主要用来处理JSON数据,包括以下主要功能:

  1. 编码(序列化)和解码(反序列化):将Python对象转换为JSON格式的字符串(编码),或者将JSON格式的字符串转换为Python对象(解码)。

  2. 读写JSON文件:能够读取和写入JSON格式的文件。

 2、编码(序列化)

  • json.dumps(): 将Python对象编码为JSON字符串。

    • json.dumps(obj, indent=4): 格式化输出JSON字符串,使其易于阅读。

  • json.dump(): 将Python对象编码为JSON字符串并写入文件。

import json

# 编码(序列化)
data = {'name': 'John', 'age': 30}
json_str = json.dumps(data)
with open('data.json', 'w') as file:
    json.dump(data, file)

3、解码(反序列化)

  • json.loads(): 将JSON字符串解码为Python对象。

    • json.loads(s, encoding='utf-8'): 解码JSON字符串并指定字符编码。

  • json.load(): 从文件中读取JSON数据并解码为Python对象。

# 解码(反序列化)
json_str = '{"name": "John", "age": 30}'
data = json.loads(json_str)
with open('data.json', 'r') as file:
    data = json.load(file)

4、序列化和反序列化的应用场景

4.1、序列化

  1. 数据交换:需要将数据从一个系统发送到另一个系统时,序列化为JSON格式可以确保接收系统能够正确解析这些数据,无论接收系统使用的是什么编程语言或平台。

  2. 持久化存储:将数据保存到文件中,以便稍后读取或分享,将数据序列化为JSON格式是一种方便且通用的方法。

  3. 可读性:JSON格式易于人类阅读和理解,这对于调试和记录非常有帮助。

4.2、反序列化

  1. 数据恢复:从文件、数据库或网络请求中接收到JSON格式的数据时,反序列化是将其转换回程序可以操作的数据结构(如字典、列表等)的必要步骤。

  2. 跨语言兼容性:由于JSON是一种标准格式,不同编程语言中的库都能够解析它。

  3. 便于处理:反序列化后的数据可以直接在程序中作为对象使用,方便进行数据操作和处理。

在实际应用中,这些操作通常与文件读写、网络通信或数据库交互等场景紧密结合。例如,一个Web服务器可能会接收到一个JSON格式的HTTP请求,服务器需要反序列化这个请求以理解客户端发送的数据,然后进行处理,最后将结果再次序列化为JSON格式发送回客户端。

5、示例

json.dumps(data) 的作用是将Python数据结构(如字典、列表等)转换为一个JSON格式的字符串。这个字符串可以在网络上进行传输,或者保存到文件中,供其他系统或程序读取。

敲黑板:序列化,得到的其实是一个“字符串”。这样子可以进行网上传输或者保存到文件。

json.loads(json_string) 的作用则是将JSON格式的字符串转换回Python的数据结构。当从网络接收到一个JSON字符串,或者从文件中读取了一个JSON字符串时,需要使用这个方法来将这个字符串转换回Python程序可以理解和操作的数据结构。

敲黑板:反序列化,得到的其实是Python的数据结构:字典或者列表式字典。这样子就可以使用Python字典或者列表式字典的方式操作这个数据,不然这就只是一个字符串而已。

示例:发送和接收JSON数据

假设我们有一个Web服务器,它接收来自客户端的JSON数据,并返回一些处理后的数据。

服务器端代码(Python Flask应用):

from flask import Flask, request, jsonify  
  
app = Flask(__name__)  
  
@app.route('/process_data', methods=['POST'])  
def process_data():  
    # 从请求中获取JSON数据  
    data = request.get_json()  # 这里Flask已经帮我们做了反序列化  
      
    # 假设我们只是简单地将年龄增加1岁  
    data['age'] += 1  
      
    # 将处理后的数据序列化为JSON字符串,并返回给客户端  
    return jsonify(data)  
  
if __name__ == '__main__':  
    app.run(debug=True)

客户端代码(使用Python的requests库):

import requests  
import json  
  
# 准备要发送的JSON数据  
data_to_send = {  
    'name': 'Alice',  
    'age': 30,  
    'city': 'New York'  
}  
  
# 将Python字典序列化为JSON字符串  
json_data = json.dumps(data_to_send)  
  
# 发送POST请求,并将JSON字符串作为请求体  
response = requests.post('http://localhost:5000/process_data', json=data_to_send)  
  
# 注意:在这里我们其实不需要手动序列化,因为requests库的json参数会自动处理  
# 如果我们要手动序列化,需要这样做:  
# response = requests.post('http://localhost:5000/process_data', data=json_data, headers={'Content-Type': 'application/json'})  
  
# 打印服务器返回的数据(已经是JSON字符串,但requests库会帮我们反序列化为Python字典)  
print(response.json())

  • 28
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值