python处理XML,JSON,字典之间的相互转换

前言

  在接口测试中数据格式转换是最常见的操作,用python进行接口测试最常见的格式转换就是XML,JSON和python字典之间的转换,因此熟练并掌握三者之间的转换是很必要的。
  通过xmltodictjson库,可以将xml和json格式的数据转换成我们熟悉的python字典类型,这样能够更高效的操作处理xml,json数据,而不是使用xml.dom来处理xml数据,从而提高测试效率。

一 XML与Dict的相互转换

  xml与dict的转换可以由第三方库xmltodict来实现,如果没有安装该库需要先安装,如下

pip install xmltodict

1. XML转Dict

  利用xmltodict.parse()函数可以将XML转Dict,如果需要去掉xml扩展体可以加上disable_entities参数,并设置为True。如下

import xmltodict

#1.xml转dict
xml_data = ''
with open('../练习文件/PeopleMessage.XML', 'r', encoding='utf-8') as xml_file:
    xml_data = xml_file.read()
print(xml_data)
print('分割线'.center(50, '*'))

#用xmltodict.parse()将xml转换成dict
#disable_entities参数为True可以去掉xml扩展体
dict_data = xmltodict.parse(xml_data, disable_entities=True)
print(type(dict_data))
print(dict_data)

转换结果

<?xml version="1.0" encoding="utf-8"?>
<message>
    <name>张三</name>
    <age>24</age>
    <job>法外狂徒</job>
    <adress>
        <city>广东</city>
        <load>广东</load>
    </adress>
</message>
***********************分割线************************
<class 'dict'>
{'message': {'name': '张三', 'age': '24', 'job': '法外狂徒', 'adress': {'city': '广东', 'load': '广东'}}}

2. Dict转XML
  利用xmltodict.unparse()可以将Dict转换成xml,如下

#2.dict转xml: xmltodict.unparse()
dict_data1 = {'message': {'name': '张三', 'age': '24', 'job': '法外狂徒', 'adress': {'city': '广东', 'load': '广东'}}}
print(dict_data1)
print('分割线'.center(50, '*'))
#dict转xml
#pretty美化xml格式
xml_data1 = xmltodict.unparse(dict_data1, pretty=True)
print(xml_data1)

结果如下

{'message': {'name': '张三', 'age': '24', 'job': '法外狂徒', 'adress': {'city': '广东', 'load': '广东'}}}
***********************分割线************************
<?xml version="1.0" encoding="utf-8"?>
<message>
	<name>张三</name>
	<age>24</age>
	<job>法外狂徒</job>
	<adress>
		<city>广东</city>
		<load>广东</load>
	</adress>
</message>

二 JSON与Dict的相互转换

  json与Dict之间的转换可以利用python自带的内置库json来实现,如下。

1. JSON转Dict
利用json.loads()可以实现JSON转Dict

#3.json转Dict:json.loads()
json_data = ''
with open('../练习文件/jsonpath.json', 'r', encoding='utf-8') as f:
    json_data = f.read()
print(json_data)
print('分割线'.center(50, '*'))

json_to_dict = json.loads(json_data)
print(type(json_to_dict))
print(json_to_dict)

转换效果

{
  "id": 11,
  "name": "Krishna Rungta",
  "username": "Bret",
  "email": "Sincere@april.biz",
  "address": {
    "street": "Kulas Light",
    "suite": "Apt. 556",
    "city": "Gwenborough",
    "zipcode": "92998-3874",
    "geo": {
      "lat": "-37.3159",
      "lng": "81.1496"
    }
  },
  "phone": "1-770-736-8031 x56442",
  "website": "hildegard.org",
  "company": {
    "name": "Romaguera-Crona",
    "catchPhrase": "Multi-layered client-server neural-net",
    "bs": "harness real-time e-markets"
  }
}
***********************分割线************************
<class 'dict'>
{'id': 11, 'name': 'Krishna Rungta', 'username': 'Bret', 'email': 'Sincere@april.biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}, 'phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name': 'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs': 'harness real-time e-markets'}}

1. Dict转JSON
利用json.dumps()可以实现Dict转JSON

#4.Dict转json:json.dumps()
Dict_data = {'id': 11, 'name': 'Krishna Rungta', 'username': 'Bret', 'email': 'Sincere@april.biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}, 'phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name': 'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs': 'harness real-time e-markets'}}
print(type(Dict_data))
print(Dict_data)
print('分割线'.center(50, '*'))

Dict_to_JSON = json.dumps(Dict_data)
print(type(Dict_to_JSON))
print(Dict_to_JSON)

转换结果

<class 'dict'>
{'id': 11, 'name': 'Krishna Rungta', 'username': 'Bret', 'email': 'Sincere@april.biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}, 'phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name': 'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs': 'harness real-time e-markets'}}
***********************分割线************************
<class 'str'>
{"id": 11, "name": "Krishna Rungta", "username": "Bret", "email": "Sincere@april.biz", "address": {"street": "Kulas Light", "suite": "Apt. 556", "city": "Gwenborough", "zipcode": "92998-3874", "geo": {"lat": "-37.3159", "lng": "81.1496"}}, "phone": "1-770-736-8031 x56442", "website": "hildegard.org", "company": {"name": "Romaguera-Crona", "catchPhrase": "Multi-layered client-server neural-net", "bs": "harness real-time e-markets"}}

三 XML与JSON的相互转换

  在python中目前还没有什么方法可以直接把XML转换成JSON(不太确定)的方法,不过在上面已经知道了XML转Dict,Dict转JSON。那么我们就可以先把XML转换成Dict,再把Dict转换成JSON。或者先把JSON转换成Dict,再把Dict转换成XML,即可完成XML与JSON的相互转换。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值