Json库的相关操作

json_demo.py

'''
    Json库的相关操作:
        Json库总共提供有四个不同的功能函数:
            dumps:默认不支持中文,如果想要显示中文,则需要将ensure_ascii设置为False
            dump:获取普通数据,转为json格式,将其写入json文件之中,进行保存
            loads
            load:是针对json文件,获取文件内容,转换为python数据类型
        json格式的数据其实就是str,只是说json在解析之后可以通过key来获取value,这是str不具备的能力。

        在json库中,加s的方法是直接操作数据,不加s则是操作文件。
        现在的接口传输数据,都是直接传输的json数据,不再依托于json文件。所以可以直接操作数据本身,而不用再通过文件获取数据了。
        是否为json,要看请求头中的content type。或者最直观的方法,看接口文档。

'''
import json

# json.dumps:转换数据内容为json格式。也就是把python中的普通数据转变为json格式。是为了满足json数据传入的需求
# 转换为json格式时,需要数据满足基本的格式规范
# a = 1
# b = [1, 2, 3, 4]
# c = 'hcc'
# d = {
#     'name': 'hcc',
#     'age': 18
# }
# e = {
#     'name': '黄财财'
# }
# json_d = json.dumps(d)
# json_e = json.dumps(e, ensure_ascii=False)
# print(d)
# print(type(d))
# print(json_d)
# print(type(json_d))
# print(json_e)

# json.loads:与dumps相反,将json格式的内容转变为python数据类型
# json.loads处理普通的python数据内容,一定会报错
# a = "1,2,3,4,5"
b = {
    "name": "hcc"
}
c = '{"name": "hcc"}'
d = '[1,2,3,4]'
loads_c = json.loads(c)
print(type(loads_c))
print(type(json.loads(d)))
print(loads_c['name'])
'''
    res1.json()其实核心处理思路就是将res1.text调用了json.loads(),将text内容从json格式转变为python数据类型。
    所以可以在json()调用过后通过key和下标来获取响应文本中的对应信息
'''

'''
    json.dump()和json.load()其实和dumps与loads一样。只是说dump和load是针对json格式文件来实现的操作。
'''

jsonpath_demo.py

'''
    jsonpath库,用于实现对json数据内容进行定位操作的
    Jsonpath其实就是xpath一样的概念,只是换了一个表达式而已。
    Jsonpath本身主要的用途在于获取响应结果中指定的value,用于做接口断言校验和关联数据的提取。
    jsonpath专门用于操作json格式的数据
    jsonpath总共需要传入两个参数,第一个为需要解析的数据对象,第二个参数为Jsonpath表达式
        表达式:$..status
            $ 表示根目录
            .. 表示不考虑位置,只找符合条件的key
            status 指定的key值
        如果找到了,返回结果为list,因为定义的key可能有多个,所以结果统一以list进行返回,返回的内容为key的value
        如果没有找到,返回结果为False。
'''
import json

import jsonpath
import requests


# 提取文本,用于处理响应结果的指定key内容的获取
def get_text(text, key):
    text = json.loads(text)
    values = jsonpath.jsonpath(text, key)
    if values:
        if len(values) == 1:
            return values[0]
    return values


# 1. 准备测试数据
# 定义接口的url
url = 'http://apihcc.fecmall.com/v1/account/login'
# 定义接口传入的数据
# body数据:并不是每一个请求都要有body信息,根据实际需要进行添加即可
data = {
    'username': 'admin',
    'password': 'admin123'
}
# headers数据:并不是每一个请求都要有头部信息,根据实际需要进行添加即可
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 '
                  'Safari/537.36'
    # 'Content-Type': 'Application/json;charset=utf-8'    # 设置请求数据为json格式
}
# 2. 模拟请求
res = requests.post(url=url, headers=headers, json=data)
print(res.text)
url1 = 'http://apihcc.fecmall.com/v1/languages'
# 请求参数
headers = {
    'access-token': res.json()['access-token']  # 将login接口返回的access-token设置为languages接口的头部参数
}
res1 = requests.get(url=url1, headers=headers)
print(res1.text)
# print(res.text)
# Jsonpath解析json格式的内容
text = json.loads(res1.text)
# print(type(text))
# values = jsonpath.jsonpath(text, "$..name")
# print(values[1])
print(get_text(res1.text, '$..message'))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值