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)
View Code

 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'}]



['贵州公司']
View Code

 

 

字符串,字典,列表之间的相互转换:

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, '中国重庆']
View Code

 

posted @ 2019-11-04 09:54  小猪猪猪  阅读(552)  评论(0)    收藏  举报