page contents

Python 操作 json 数据

本文讲述了python操作 json 数据!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

attachments-2024-02-BtaEF07U65d2f7f6707f2.png本文讲述了python操作 json 数据!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

在Python中,操作JSON数据主要包括序列化(将Python对象转换为JSON格式)和反序列化(将JSON字符串转换回Python对象)。
以下是使用Python内置的json模块进行这些操作的基本示例:

JSON 序列化 (Serialization)
将Python对象转换成JSON字符串:

import json
# 定义一个Python字典或列表等可序列化的对象
data = {
    "name": "Alice",
    "age": 30,
    "hobbies": ["reading", "programming"]
}
# 使用 json.dumps() 方法将 Python 对象转为 JSON 字符串
json_string = json.dumps(data)
print(json_string)  # 输出:{"name": "Alice", "age": 30, "hobbies": ["reading", "programming"]}

JSON 反序列化 (Deserialization)

将JSON字符串转换成Python对象:


import json
# 假设我们有一个 JSON 格式的字符串
json_data = '{"name": "Bob", "age": 35, "hobbies": ["guitar", "travel"] }'
# 使用 json.loads() 方法将 JSON 字符串转为 Python 字典
python_obj = json.loads(json_data)
print(python_obj)  # 输出:{'name': 'Bob', 'age': 35, 'hobbies': ['guitar', 'travel']}
# 或者从文件读取 JSON 数据并转换
with open('data.json', 'r') as file:
    python_obj_from_file = json.load(file)
print(python_obj_from_file)

注意事项:
JSON仅支持特定的数据类型,如数字、字符串、布尔值、null、数组(对应Python中的列表)和对象(对应Python中的字典)。Python中的一些非标准类型(如None、datetime对象、自定义类实例等)需要通过特殊方式处理才能正确地序列化和反序列化。
json.dumps()方法接受额外的参数用于控制序列化过程,例如ensure_ascii=False可以输出包含非ASCII字符的JSON字符串,indent用于美化输出,设置缩进。
json.load()和json.loads()在遇到不符合JSON格式的输入时会抛出json.JSONDecodeError异常。
在Python进行接口自动化测试时,操作JSON数据是常见且关键的步骤。通常情况下,我们会使用json模块处理HTTP请求中的JSON内容,并通过requests库发送这些请求到API服务器。以下是一个基本示例,展示如何构建和解析JSON数据以执行接口测试:

发送带有JSON数据的POST请求

import requests
import json
# 定义要发送的JSON数据
payload = {
    "username": "testuser",
    "password": "testpassword",
    "email": "test@example.com"
}
# 将Python字典转换为JSON格式字符串
json_payload = json.dumps(payload)
# 设置请求头信息,告诉服务器我们正在发送JSON数据
headers = {'Content-Type': 'application/json'}
# 发送POST请求
response = requests.post('http://example.com/api/login', data=json_payload, headers=headers)
# 检查响应状态码是否正常
if response.status_code == 200:
    # 如果响应成功,将其内容反序列化为Python对象
    response_json = response.json()
    print(response_json)
else:
    print(f"请求失败,状态码:{response.status_code}")
# 根据需要对响应JSON数据进行断言或进一步处理
assert response_json['status'] == 'success'
解析返回的JSON响应

对于从API接收到的JSON响应,可以使用response.json()方法将响应体的内容转化为Python字典或列表以便于进行验证。

数据驱动测试

在数据驱动测试场景中,可以从文件读取多个JSON记录(例如,每行一个JSON对象),然后依次对每个记录执行相同的操作:

with open('test_data.json') as f:
    test_cases = json.load(f)
for case in test_cases:
    # 调整请求参数并发送请求
    response = requests.post('http://example.com/api/endpoint', json=case)
    # 针对每个测试用例进行相应的断言
    assert_response(response, case)
这里,test_data.json文件可能包含多条记录,每一项都是一个待测试的JSON数据结构。在循环中,逐个发送请求并根据每个用例的结果进行验证。

json在接口自动化里的高级使用
在接口自动化测试中,JSON的高级使用通常涉及到更复杂的数据操作、模式验证以及高效地提取和比较响应数据。以下是一些高级用例:
JsonPath 或 JMESPath 的应用:
使用jsonpath或jmespath库来从复杂的JSON响应中精准提取数据,而无需遍历整个数据结构。

import jsonpath  # or jmespath for JMESPath
response_json = {"users": [{"name": "Alice", "id": 1}, {"name": "Bob", "id": 2}]}
names = jsonpath.jsonpath(response_json, '$.users[*].name')  # 返回 ['Alice', 'Bob']
JSON Schema验证:

使用jsonschema库对API返回的JSON响应进行模式匹配验证,确保其符合预定义的结构和约束条件。

from jsonschema import validate, ValidationError
schema = {
    "type": "object",
    "properties": {
        "status": {"type": "string"},
        "data": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "integer"}, "name": {"type": "string"}}}}
    },
    "required": ["status", "data"]
}
response = {"status": "ok", "data": [{"id": 1, "name": "Alice"}]}
try:
    validate(instance=response, schema=schema)
    print("Response matches the schema.")
except ValidationError as e:
    print(f"Validation error: {e}")

动态构建请求体:

根据需求动态生成或修改JSON请求体,例如基于数据库查询结果构造请求参数。

def build_request_body(user_id):
    user_data = get_user_from_database(user_id)  # 假设这是一个获取用户信息的方法
    request_body = {"user": {"id": user_data["id"], "name": user_data["name"]}}
    return request_body
payload = build_request_body(1)
response = requests.post('http://example.com/api/update', json=payload)

批量执行与结果分析:
对于大批量的数据交互,可以将多个JSON请求组织成一个列表,并利用循环或异步方式发送请求,然后汇总所有响应的结果进行整体评估。
错误处理和容错机制:
对接收到的JSON数据进行深度检查,对于非标准格式或异常字段,能够有策略地处理并记录异常。
缓存和复用:
对于一些重复性的数据,如Token或者Header中的JWT,可以将其存储起来并在后续请求中复用,提高效率同时保持安全性。

通过以上这些高级技术,可以在接口自动化测试中更好地管理和操纵JSON数据,提高测试代码的质量和可维护性。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-02-19 14:41
  • 阅读 ( 184 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章