Python 中的 JSON 操作:简单、高效的数据交换格式

在现代的数据交换和存储中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,备受青睐。它不仅易于阅读和理解,还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件,实现数据的序列化和反序列化。

1. JSON 数据格式

JSON 格式采用键值对的方式表达信息。它的值可以是对象、数组、字符串、整数、浮点数、布尔型或空值。下面是一个 JSON 数据的例子:

  1. {

  2. "name": "kira",

  3. "age": 18,

  4. "hobby": ["唱歌", "吹牛"],

  5. "friends": [

  6. {"name": "刘德华"},

  7. {"name": "梁朝伟"}

  8. ]

  9. }

在实际工作中,我们可以根据需要扩展和定制这种数据格式,以适应不同的场景和业务需求。

2. Python 操作 JSON 文件

Python 提供了内置的 json 模块,用于解析和操作 JSON 数据。

2.1 JSON 反序列化为 Python 对象

将 JSON 数据反序列化为 Python 对象是常见的操作,可以利用 json.loads() 方法实现。

 
  1. import json

  2. json_str = '{"name":"kira","age":18}'

  3. print(json_str, type(json_str))

  4. load_data = json.loads(json_str)

  5. print(load_data, type(load_data))

运行结果:

 
  1. {"name":"kira","age":18} <class 'str'>

  2. {'name': 'kira', 'age': 18} <class 'dict'>

此外,如果需要从 JSON 文件中加载数据,可以使用 json.load() 方法。

 
  1. import json

  2. with open('kira.json', 'r', encoding='utf-8') as f:

  3. load_data = json.load(f)

  4. print(load_data, type(load_data))

运行结果:

{'name': 'kira', 'age': 18, 'hobby': ['唱歌', '吹牛'], 'friends': [{'name': '刘德华'}, {'name': '梁朝伟'}]} <class 'dict'>
2.2 Python 序列化为 JSON

与反序列化相对应,Python 可以将对象序列化为 JSON 数据。json.dumps() 方法可以实现这一功能。

  1. import json

  2. data = {

  3. "name": "kira",

  4. "age": 18,

  5. "hobby": ["唱歌", "吹牛"],

  6. "friends": [

  7. {"name": "刘德华"},

  8. {"name": "梁朝伟"}

  9. ]

  10. }

  11. json_str = json.dumps(data)

  12. print(json_str)

  13. print(json.dumps(data, ensure_ascii=False))

  14. print(json.dumps(data, ensure_ascii=False, indent=4))

  15. print(json.dumps(data, ensure_ascii=False, indent=4, sort_keys=True))

运行结果

 
  1. {"name": "kira", "age": 18, "hobby": ["\u5531\u6b4c", "\u5439\u725b"], "friends": [{"name": "\u5218\u5fb7\u534e"}, {"name": "\u6881\u671d\u4f1f"}]}

  2. {"name": "kira", "age": 18, "hobby": ["唱歌", "吹牛"], "friends": [{"name": "刘德华"}, {"name": "梁朝伟"}]}

  3. {

  4. "name": "kira",

  5. "age": 18,

  6. "hobby": [

  7. "唱歌",

  8. "吹牛"

  9. ],

  10. "friends": [

  11. {

  12. "name": "刘德华"

  13. },

  14. {

  15. "name": "梁朝伟"

  16. }

  17. ]

  18. }

  19. {

  20. "age": 18,

  21. "friends": [

  22. {

  23. "name": "刘德华"

  24. },

  25. {

  26. "name": "梁朝伟"

  27. }

  28. ],

  29. "hobby": [

  30. "唱歌",

  31. "吹牛"

  32. ],

  33. "name": "kira"

  34. }

如果需要将 Python 对象序列化后写入 JSON 文件,可以使用 json.dump() 方法。

 
  1. import json

  2. data = {

  3. "name": "kira",

  4. "age": 18,

  5. "hobby": ["唱歌", "吹牛"],

  6. "friends": [

  7. {"name": "刘德华"},

  8. {"name": "梁朝伟"}

  9. ]

  10. }

  11. with open('first.json', 'w', encoding='utf-8') as f:

  12. json.dump(data, f, ensure_ascii=False, indent=4)

通过上述方法,我们可以轻松地在 Python 中进行 JSON 数据的序列化和反序列化操作。无论是数据交换还是数据存储,JSON 都是一种简单而高效的选择。在实际工作中,我们可以根据具体需求灵活运用 JSON 的优势,提高工作效率。

3 工作中的常见场景

3.1 网络请求和响应

在web开发中,客户端和服务器之间得数据传输通常使用JSON格式。客户端可以将数据封装成 JSON 字符串,通过网络请求发送给服务器。服务器接收到 JSON 数据后,可以使用 Python 中的 JSON 模块将其反序列化为 Python 对象进行处理。处理完成后,服务器可以将结果序列化为 JSON 数据,发送给客户端作为响应。例如:

服务器端(Python):
 
  1. from flask import Flask, jsonify, request

  2. app = Flask(__name__)

  3. @app.route('/api/data', methods=['POST'])

  4. def receive_data():

  5. data = request.get_json()

  6. # 对接收到的数据进行处理

  7. processed_data = process_data(data)

  8. # 将处理后的数据作为 JSON 响应返回给客户端

  9. return jsonify(processed_data)

  10. def process_data(data):

  11. # 在这里进行数据处理的逻辑

  12. # ...

  13. return processed_data

  14. if __name__ == '__main__':

  15. app.run()

客户端(JavaScript):
 
  1. const data = {

  2. name: '测试玩家勇哥',

  3. age: 18,

  4. hobby: ['唱歌', '吹牛'],

  5. };

  6. fetch('/api/data', {

  7. method: 'POST',

  8. headers: {

  9. 'Content-Type': 'application/json',

  10. },

  11. body: JSON.stringify(data),

  12. })

  13. .then(response => response.json())

  14. .then(responseData => {

  15. // 处理从服务器返回的响应数据

  16. console.log(responseData);

  17. });

3.2 配置文件管理

JSON 格式数据非常适合用于存储和管理配置文件,当然数据文件的使用之前小编有一篇文章详细介绍过,忘记了的小伙伴可以去复习一下。

下面举个荔枝:

读取配置文件:
 
  1. import json

  2. def read_config_file(file_path):

  3. with open(file_path, 'r') as f:

  4. config_data = json.load(f)

  5. return config_data

  6. # 读取配置文件

  7. config = read_config_file('config.json')

  8. # 获取配置项的值

  9. db_host = config['database']['host']

  10. db_port = config['database']['port']

修改配置文件:
 
  1. import json

  2. def update_config_file(file_path, new_config):

  3. with open(file_path, 'w') as f:

  4. json.dump(new_config, f, indent=4)

  5. # 读取配置文件

  6. config = read_config_file('config.json')

  7. # 修改配置项的值

  8. config['database']['port'] = 5432

  9. # 更新配置文件

  10. update_config_file('config.json', config)

数据持久化存储也是可以写道JSON文件中的,本文就不做过多的描写了。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

 

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值