编程语言
首页 > 编程语言> > python json 和 jsonpath 模块的使用

python json 和 jsonpath 模块的使用

作者:互联网

"""
json.load() json.loads() json.dump() json.dumps() 的区别
以及 json.jsonpath 用法
"""
import json
import jsonpath

# json.dumps() 将python中字典类型转化成json字符串类型

python_dict = {
    'contact_name': 'Auto-test111',
    'contact_phone': '18621300857',
    'province_code': '110000',
    'city_code': '110100',
    'district_code': '110101',
    'address': '北京市东城区',
    'builtin_is_default_address': False,
    'managed': 1
}

json_dumps_str = json.dumps(python_dict, ensure_ascii=False)
print(json_dumps_str, type(json_dumps_str))  # {"contact_name": "Auto-test111", "contact_phone": "18621300857", "province_code": "110000", "city_code": "110100", "district_code": "110101", "address": "北京市东城区", "builtin_is_default_address": false, "managed": 1} <class 'str'>

# json.loads() 将json字符串类型转化成python中字典类型
json_str = '{"contact_name": "Auto-test111", "contact_phone": "18621300857", "province_code": "110000",' \
           ' "city_code": "110100", "district_code": "110101", "address": "北京市东城区",' \
           ' "builtin_is_default_address": false, "managed": 1}'
json_dict = json.loads(json_str)
print(json_dict, type(json_dict))  # {'contact_name': 'Auto-test111', 'contact_phone': '18621300857', 'province_code': '110000', 'city_code': '110100', 'district_code': '110101', 'address': '北京市东城区', 'builtin_is_default_address': False, 'managed': 1} <class 'dict'>

# json.load 将json文件转化成python 字典类型

with open('address.json', encoding='utf-8') as load_json_file:
    payload = json.load(load_json_file)

print(payload, type(payload))  # {'contact_name': 'Auto-test111', 'contact_phone': '18621300857', 'province_code': '110000', 'city_code': '110100', 'district_code': '110101', 'address': '北京市东城区', 'builtin_is_default_address': False, 'managed': 1} <class 'dict'>


# json.dumps 将python 字典类型写入json文件

with open("address_new.json", 'w', encoding='utf-8') as write_json_file:
    json.dump(python_dict, write_json_file, ensure_ascii=False)


# jsonpath 的用法

dict_value = {"meta": {"code": 2000, "dataset": {"data": [{"name": "jack_1", "age": 24, "gender": "男"},
                                                          {"name": "jack_2", "age": 25, "gender": "男"},
                                                          {"name": "jack_3", "age": 26, "gender": "女"},
                                                          {"name": "jack_4", "age": 27, "gender": "女"},
                                                          {"name": "jack_5", "age": 28, "gender": "女"},
                                                          {"name": "jack_6", "age": 29, "gender": "男"}]}}}


# 获取所有学生的名字
student_names = jsonpath.jsonpath(dict_value, '$.meta.dataset.data[*].name')
student_names = jsonpath.jsonpath(dict_value, '$.meta.dataset..name')
print(student_names)  # ['jack_1', 'jack_2', 'jack_3', 'jack_4', 'jack_5', 'jack_6']


# 获取第一个学生的名字
student_name = jsonpath.jsonpath(dict_value, '$.meta.dataset.data[0].name')
print(student_name)  # ['jack_1']

# 获取学生年龄是28岁的学生信息
student_info = jsonpath.jsonpath(dict_value, '$.meta.dataset.data.[?(@.age == 28)]')
print(student_info)  # [{'name': 'jack_5', 'age': 28, 'gender': '女'}]


# 获取学生性别是男性的学生信息
student_info = jsonpath.jsonpath(dict_value, '$.meta.dataset.data.[?(@.gender == "男")]')
print(student_info)  # [{'name': 'jack_1', 'age': 24, 'gender': '男'}, {'name': 'jack_2', 'age': 25, 'gender': '男'}, {'name': 'jack_6', 'age': 29, 'gender': '男'}]

# 获取学生性别是男性的学生名字
student_names = jsonpath.jsonpath(dict_value, '$.meta.dataset.data.[?(@.gender == "男")].name')
print(student_names)  # ['jack_1', 'jack_2', 'jack_6']

 

标签:code,name,python,json,jsonpath,dict,jack
来源: https://www.cnblogs.com/zengmuyao/p/16380297.html