一、引言
在自動(dòng)化測試的時(shí)候經(jīng)常遇到j(luò)son格式數(shù)據(jù)的處理,也經(jīng)常被周圍想剛學(xué)習(xí)Python的同志問起這個(gè),今天專門寫一個(gè)短文介紹一下。
二、先說說json
現(xiàn)在json越來越流行,基本上稱為主流,開發(fā)在做技術(shù)方案的時(shí)候也首選json做為數(shù)據(jù)交換的格式。各位測試的小伙伴也發(fā)現(xiàn)了,對(duì)于xml格式,json是比較易于閱讀。反正總結(jié)起來就是json很多好處,運(yùn)用很廣泛,想學(xué)習(xí)自動(dòng)化的小伙伴,不管是Python、Java還是Ruby,對(duì)于json數(shù)據(jù)的處理還是需要有掌握的。
三、Python的處理方式
先給一個(gè)測試的數(shù)據(jù)
{
"name": "abc",
"url": "http://www.abc.com",
"page": 88,
"isNonProfit": true,
"address": {
"street": "科技園路.",
"city": "江蘇蘇州",
"country": "中國"
},
"links": [
{
"name": "Google",
"url": "http://www.google.com"
},
{
"name": "Baidu",
"url": "http://www.baidu.com"
},
{
"name": "SoSo",
"url": "http://www.SoSo.com"
}
]
}
1. 直接解析json字符串
# -*- coding: utf-8 -*-
import json # 一個(gè)Python3內(nèi)置的模塊不需要安裝
json_str = '{"name":"abc","url":"http://www.abc.com","page":88,"isNonProfit":true,"address":{"street":"科技園路.","city":"江蘇蘇州","country":"中國"},"links":[{"name":"Google","url":"http://www.google.com"},{"name":"Baidu","url":"http://www.baidu.com"},{"name":"SoSo","url":"http://www.SoSo.com"}]}'
print('json_str的類型是:' + str(type(json_str)))
json_dict = json.loads(json_str)
print('json_dict的類型是:' + str(type(json_dict)))
print('name的值是:'+json_dict['name'])
我們直接使用json模塊的loads方法,傳入json格式的字符串,返回的是Python中的字典(dict)格式。之后我們可以使用字典的取值方式,獲取各個(gè)key的值。
輸出結(jié)果:
json_str的類型是:<class 'str'>
json_dict的類型是:<class 'dict'>
name的值是:abc
2. 解析json文件
我想將上面的json字符串的內(nèi)容保存在了一個(gè)文件中json_file.json,與測試腳本放在一個(gè)目錄下面。
# -*- coding: utf-8 -*-
import json # 一個(gè)Python3內(nèi)置的模塊不需要安裝
f = open(file='json_file.json', mode='r', encoding='utf-8')
json_dict = json.load(f)
print('json_dict的類型是:' + str(type(json_dict)))
print('name的值是:' + json_dict['name'])
先使用open函數(shù)打開一個(gè)文件,傳到load方法中,其實(shí)看源碼可以知道load方法還是調(diào)用了loads方法。
打印結(jié)果:
json_dict的類型是:<class 'dict'>
name的值是:abc
3. 字典數(shù)據(jù)轉(zhuǎn)成json字符串
new_json_str = json.dumps(json_dict)
直接使用dumps函數(shù)就可以了
4. 字典數(shù)據(jù)轉(zhuǎn)成json字符串,到文件
上面這個(gè)方法是將json字符串保存到變量中的,還有一個(gè)方法dump可以將字符串直接保存到文件。
f = open(file='new_json_file.json', mode='w', encoding='utf-8')
new_json_str = json.dump(json_dict,f,ensure_ascii=False)
ensure_ascii:控制是否轉(zhuǎn)義中文,默認(rèn)True,文件中的中文會(huì)保存成\u開頭的編碼。設(shè)置成False就會(huì)正確顯示中文。