Python中的JSON數(shù)據(jù)處理

我們在做接口測試的時候,接觸最多的數(shù)據(jù)格式應當是JSON格式了。我們先看下JSON的定義:

JSON: JavaScript Object Notation(JavaScript 對象表示法)
JSON 是存儲和交換文本信息的語法。類似 XML。
JSON 比 XML 更小、更快,更易解析。

我們看一個簡單的例子:

{
    "sites": [
        {
            "name": "Nemo",
            "url": "http://www.itdecent.cn/u/ea364f9b9048"
        },
        {
            "name": "google",
            "url": "www.google.com"
        }
    ]
}

看了這個例子,有的人會說,這不就是Python里面的字典么?既然是字典,為什么還需要轉(zhuǎn)換?

其實這只是看起來,實際上是有很大差異的,JSON里面的數(shù)據(jù)類型和Python里面的數(shù)據(jù)類型是不一樣的;
比如Python里面的字典,JSON里面是對象;Python里面的字符串是str,而JSON里面是string;Python里面的空值是None,JSON里面的空值是null。

這是一個Python中的列表,元素只有一個字典:

[{
    'a': 1,
    'b': 2,
    'c': 3,
    'd': True,
    'e': False,
    'f': None
}]

我們可以通過一些在線的JSON校驗格式化工具看看這是不是一個JSON數(shù)據(jù)。試一試!

我們看一下結果:

JSON校驗結果

注意,要想得到圖中的效果,記得點 “ 新版 ”。

從上面的圖片中,我們可以看出JSON格式中單引號是不被識別的,另外True、False、None也是不能被識別的。

由于這些差異的存在,如果不轉(zhuǎn)換直接使用把Python里面的字典當成JSON使用,或者直接拿獲取到的JSON數(shù)據(jù)當成字典用,都會出錯。

Python與JSON數(shù)據(jù)類型對應表:
Python JSON 說明
dict object 字典
list, tuple array 序列
str string 字符串
int, float number 數(shù)字類型
True true 布爾值True
False false 布爾值 False
None null 空值

既然知道了為什么要轉(zhuǎn)換,就來了解怎么轉(zhuǎn)換,這就需要用到Python的內(nèi)置模塊json,內(nèi)置模塊,在代碼中直接引用即可:

import json

json模塊中主要用到的就4個函數(shù):

json.dumps(): 將Python數(shù)據(jù)編碼(轉(zhuǎn)換)為JSON數(shù)據(jù);
json.loads(): 將JSON數(shù)據(jù)轉(zhuǎn)換(解碼)為Python數(shù)據(jù);
json.dump(): 將Python數(shù)據(jù)編碼并寫入JSON文件;
json.load(): 從JSON文件中讀取數(shù)據(jù)并解碼。

接下來我們看下這些函數(shù)怎么使用:

#!/usr/bin/python3
import json

data = [{
    'a': 1,
    'b': 2,
    'c': 3,
    'd': True,    #注意觀察,在python的字典中
    'e': False,   # True和False首字母是大寫的
    'f': None    # 空值是None
}]   

json_data = json.dumps(data)
print(json_data)

輸出結果:

[{"a": 1, "b": 2, "c": 3, "d": true, "e": false, "f": null}]

注意觀察上面的結果:

單引號變成了雙引號(用JSON數(shù)據(jù)的時候雙引號才是標準的);
首字母大寫的TrueFalse變成了全小寫truefalse;
空值由None變成了null。

我們還是用剛才生成的JS格式數(shù)據(jù)來練習:

#!/usr/bin/python3
import json

jsonData = '''[
   {
       "a": 1,
       "b": 2,
       "c": 3,
       "d": true,
       "e": false,
       "f": null
   }
]'''
data = json.loads(jsonData)
print(data)

輸出結果:

[{'a': 1, 'b': 2, 'c': 3, 'd': True, 'e': False, 'f': None}]

可以看出結果變成了Python能使用的數(shù)據(jù)。

剩下的json.dump()和json.load()用來處理JSON文件的:

#!/usr/bin/python3
import json

data = [{
    'a': 1,
    'b': 2,
    'c': 3,
    'd': True,    
    'e': False,  
    'f': None 
}]   

# 寫入 JSON 數(shù)據(jù)
with open('data.json', 'w') as f:    #在代碼當前目錄生成一個data.json的文件
     json.dump(data, f)      

# 讀取數(shù)據(jù)
with open('data.json', 'r') as f:   #讀取當前目錄的json文件并解碼成python數(shù)據(jù)
     data = json.load(f)
     print(data)

如果覺得生成的JSON文件中格式不好看,可以把文件內(nèi)容拷貝到在剛才的線校驗工具左邊欄中并雙擊!

格式化前
格式化后

把格式化之后的拷到文件中覆蓋即可。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容