Python中的JSON详解:数据交换格式与字典的相互转换

导语:今天学习一下json

JSON简介

JSON是一种广泛使用的数据格式,其语法基于JavaScript对象字面量表示法,但JSON本身是语言无关的。它主要用于数据交换,特别是在服务器与客户端之间。

JSON与Python字典的关系

在Python中,JSON格式与字典非常相似,但有以下区别:

  • JSON的键和字符串值必须使用双引号("),而Python字典的键和字符串值可以使用单引号(')或双引号。
  • JSON直接支持的数据类型包括字符串、数字、对象(在Python中对应字典)、数组(在Python中对应列表)、布尔值和null。Python字典则可以包含更复杂的数据类型,如元组、集合等。

字典转JSON

首先,我们创建一个Python字典:

import json

dict = {"name": "cuicui", "age": 25, "score": 90}
print("打印出的是{},格式是{}".format(dict, type(dict)))
打印出的是{'name': 'cuicui', 'age': 25, 'score': 90},格式是<class 'dict'>

接下来,我们将这个字典转换为JSON格式的字符串:

dict_json = json.dumps(dict)
print("打印出的是{},格式是{}".format(dict_json, type(dict_json)))
打印出的是{"name": "cuicui", "age": 25, "score": 90},格式是<class 'str'>

JSON转字典

现在,我们有一个JSON格式的字符串,我们将它转换回Python字典:

json_str = '{"name": "cuicui", "age": 25, "score": 90}'
json_dict = json.loads(json_str)
print("打印出的是{},格式是{}".format(json_dict, type(json_dict)))
打印出的是{'name': 'cuicui', 'age': 25, 'score': 90},格式是<class 'dict'>
修改字典并转换回JSON

假设我们需要在字典中添加一个新键值对,然后再将其转换回JSON格式:

dict['gender'] = 'male'
json_str_new = json.dumps(dict)
print("修改后的JSON字符串:{}".format(json_str_new))
修改后的JSON字符串:{"name": "cuicui", "age": 25, "score": 90, "gender": "male"}

 使用场景

场景 1:验证API响应内容

场景描述:测试一个用户注册API,验证返回的JSON响应是否符合预期。

操作步骤

  1. 使用测试工具(如Postman、JMeter或Python的requests库)发送一个注册请求到API。
  2. 捕获API返回的JSON响应。
  3. 将捕获的JSON响应与预期的JSON模式(字典)进行比较。

代码示例(使用Python的requests库):

import requests
import json

# 预期的响应模式
expected_response = {
    "status": "success",
    "message": "用户注册成功!",
    "data": {
        "user_id": "123456",
        "username": "testuser",
        "email": "testuser@example.com"
    }
}

# 发送注册请求
response = requests.post('http://api.com/register', json={
    "username": "testuser",
    "password": "testpassword",
    "email": "testuser@example.com"
})

# 将响应内容转换为字典
response_dict = response.json()

# 验证响应是否符合预期
assert response_dict == expected_response

场景 2:参数化测试

场景描述:对一个登录API进行参数化测试,验证不同用户名和密码组合的响应。

操作步骤

  1. 准备一个包含不同用户名和密码组合的测试数据集(列表)。
  2. 对每个测试用例发送登录请求。
  3. 验证每个响应是否符合预期的成功或失败状态。

代码示例

import requests

# 测试数据集
test_data = [
    {"username": "user1", "password": "pass1"},
    {"username": "user2", "password": "pass2"},
    {"username": "user3", "password": "wrongpassword"},  # 预期失败
]

# 登录API的URL
login_url = 'http://api.com/login'

# 执行参数化测试
for data in test_data:
    response = requests.post(login_url, json=data)
    if data["password"] == "wrongpassword":
        assert response.status_code == 401  # 预期失败状态码
    else:
        assert response.status_code == 200  # 预期成功状态码

场景 3:测试用户注册API

在测试一个用户注册API时,我们通常会发送包含用户信息的JSON请求,并验证API的响应。在这个场景中,我们想要测试API在接收到包含随机手机号的JSON请求时的处理能力。

操作步骤

1、创建了一个包含用户名和手机号的JSON字符串。

2、修改了这个字符串,将单引号替换为双引号,使其成为一个有效的JSON格式。

3、使用json.loads()将字符串转换为字典。

4、在这个字典中,我们调用generate_random_phone()函数来生成一个随机的手机号,并将其更新到字典中。

5、我们使用json.dumps()将修改后的字典转换回JSON字符串,并打印出来。

通过这种方式,我们可以测试API在接收到包含随机手机号的JSON请求时的处理能力,确保API能够正确处理这种格式的数据。

代码示例

import json
import random

# 原始JSON字符串,包含用户的手机号
s = '''{'username':'cuicui', 'phone':'1880000000'}'''

# 将单引号替换为双引号以形成有效的JSON字符串
s = s.replace("'", '"')

# 将字符串转换为字典
data = json.loads(s)

# 生成随机手机号
def generate_random_phone():
    return "1" + "".join([str(random.randint(0, 9)) for _ in range(10)])

# 更新字典中的手机号
data['phone'] = generate_random_phone()

# 将字典转换回JSON字符串
updated_s = json.dumps(data)

# 打印修改后的JSON字符串
print(updated_s)

总结

下次见,拜拜~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值