python3 json(dump,dumps,load,loads)以及jsonpath的用法,dict,str,list之间的转换
1.首先python里面的基础数据类型有:int、str、 float、list、bool、tuple、dict、set这几种类型,里面没json这种数据类型。
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
由于你的代码是python写的(也有可能是php,java,c,ruby等语言),但是后端接口是java写的(也有可能是其它语言),不同的语言数据类型是不一样的(就好比中国的语言和美国的语言数据类型也不一样,中国的一般说一只羊,一头牛,美国都是 a /an这种单位),所以就导致你提交的数据,别的开发语言无法识别,这就需要规范传输的数据(传输的数据都是一个字符串),大家都遵循一个规范,按一个标准的格式去传输,于是就有就json这种国际化规范的数据类型。
2.理解:
(1) json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将python对象序列化转化为json格式的字符串);
(2) json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将json格式数据的字符串反序列化转化为python对象);
(3)json.dump()将Python对象序列化为Json格式的数据流并写入文件类型的对象中;
(4)json.load()从文件类型的对象中读取Json格式的数据并反序列化成Python对象。
进行序列化时,Python类型与Json类型的转换关系如下表所示:
进行反序列化时,Json类型与Python类型的转换关系如下:
注意:字符串必须要用双引号,不能用单引号,多个数据之间用逗号隔开。
中文转换问题,dump 的时候只能存放ascii字符。

import json json_info="{'name':'肖战","age':28}" file=open("1.json","w",encoding="utf-8") json.dump(json_info,file,ensure_ascii=False) file.close() file1=open("1.json","r",encoding="utf-8") info=json.load(file1) print(info)
jsonpath
JsonPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种原因实现保本:JavaScript/Python/PHP和Java。
使用方法如:
import jsonpath
res=jsonpath.jsonpath(dic_name,'$..key_name')
#嵌套n层也能取到所有key_name信息,其中:“$”表示最外层的{},“..”表示模糊匹配,当传入不存在的key_name时,程序会返回false

json_data = {"code": 200, "data": {"companyId": 170824133484, "companyName": "\u8d35\u5dde\u516c\u53f8", "domIds": ["cs_new_admittance_car_dealer", "cs_new_no_admittance_car_dealer", "cs_look_car_dealer_details", "cs_edit_car_dealer", "cs_car_dealer_enable", "cs_admittance_apply", "cs_edit_no_car_dealer", "cs_customer_manage_add_customer", "cs_customer_manage_customer_details", "cs_customer_manage_edit_user_customer"], "geoId": 170824133550, "id": 170824133727, "loginName": "gz0130", "name": "\u4f55\u6587", "phone": "", "roleInfoList": [{"enname": "CustomerManager", "id": 170607000698, "roleName": "\u5ba2\u6237\u7ecf\u7406", "roleType": "user"}, {"enname": "CommercialVehicle", "id": 190305539048, "roleName": "\u5546\u7528\u8f66\u5bf9\u63a5\u5c97", "roleType": "user"}, {"enname": "CustomerAttache", "id": 170607000716, "roleName": "\u5ba2\u6237\u4e13\u5458", "roleType": "user"}], "roles": ["CUSTOMERMANAGER", "COMMERCIALVEHICLE", "CUSTOMERATTACHE"], "token": "3B6A7873F5E340BEBFB89CAB8A6F40E5"}, "msg": "OK", "status": "true"} import jsonpath res = jsonpath.jsonpath(json_data, '$..data') res1=jsonpath.jsonpath(json_data,'$..companyName') print(res) print(res1) [{'companyId': 170824133484, 'companyName': '贵州公司', 'domIds': ['cs_new_admittance_car_dealer', 'cs_new_no_admittance_car_dealer', 'cs_look_car_dealer_details', 'cs_edit_car_dealer', 'cs_car_dealer_enable', 'cs_admittance_apply', 'cs_edit_no_car_dealer', 'cs_customer_manage_add_customer', 'cs_customer_manage_customer_details', 'cs_customer_manage_edit_user_customer'], 'geoId': 170824133550, 'id': 170824133727, 'loginName': 'gz0130', 'name': '何文', 'phone': '', 'roleInfoList': [{'enname': 'CustomerManager', 'id': 170607000698, 'roleName': '客户经理', 'roleType': 'user'}, {'enname': 'CommercialVehicle', 'id': 190305539048, 'roleName': '商用车对接岗', 'roleType': 'user'}, {'enname': 'CustomerAttache', 'id': 170607000716, 'roleName': '客户专员', 'roleType': 'user'}], 'roles': ['CUSTOMERMANAGER', 'COMMERCIALVEHICLE', 'CUSTOMERATTACHE'], 'token': '3B6A7873F5E340BEBFB89CAB8A6F40E5'}] ['贵州公司']
字符串,字典,列表之间的相互转换:

print("字符串转列表>>>>>>>>>>>") str1="我爱肖战" list1=list(str1) print("list1:{}".format(list1)) str2="我 爱 肖 战" list2=str2.split(" ")#str2.format() print("list2:{}".format(list2)) str3="我.爱.肖.战" list3=str3.split(".") print("list3:{}".format(list3)) print("列表转字符串>>>>>>>>>>>>>>") str4="".join(list3) print("str4:{}".format(str4)) str5=".".join(list3) print("str5:{}".format(str5)) str6=" ".join(list3) print("str6:{}".format(str6)) print("字符串转字典>>>>>>>>>>>") str_dict="{'name':'肖战'}" dict_test=eval(str_dict) print("字符串转字典:{}".format(dict_test)) print("字典转成字符串>>>>>>>>>") dict1={'name':'肖战','age':28} str_test=str(dict1) print("字典转成字符串:{}".format(str_dict)) print("列表转字典》》》》》》》》》》》") li1=["肖战","小飞侠"] li2=[28,"重庆"] li3=[li1,li2] new_dict=dict(li3)# 第一种 new_dict1=dict(zip(li1,li2)) print("列表转字典:::::{},{}".format(new_dict,new_dict1)) print("字典转列表!!!!!!!!!!!") dict_1={"name":"肖战","age":28,"birthplace":"中国重庆"} list_keys=list(dict_1) list_values=list(dict_1.values()) print(list_keys,list_values) 字符串转列表>>>>>>>>>>> list1:['我', '爱', '肖', '战'] list2:['我', '爱', '肖', '战'] list3:['我', '爱', '肖', '战'] 列表转字符串>>>>>>>>>>>>>> str4:我爱肖战 str5:我.爱.肖.战 str6:我 爱 肖 战 字符串转字典>>>>>>>>>>> 字符串转字典:{'name': '肖战'} 字典转成字符串>>>>>>>>> 字典转成字符串:{'name':'肖战'} 列表转字典》》》》》》》》》》》 列表转字典:::::{'肖战': '小飞侠', 28: '重庆'},{'肖战': 28, '小飞侠': '重庆'} 字典转列表!!!!!!!!!!! ['name', 'age', 'birthplace'] ['肖战', 28, '中国重庆']