Python -- Json 數據編碼及解析
Json 簡單介紹
JSON: JavaScript Object Notation(JavaScript 對象表示法)
JSON 是存儲和交換文本信息的語法。類似 XML。
JSON 比 XML 更小、更快,更易解析。
這個 sites 對象是包含 3 個站點記錄(對象)的數組。
{ "sites": [ { "name":"菜鳥教程" , "url":"www.runoob.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" } ] }
JSON 數字
JSON 數字可以是整型或者浮點型:
{ "age":30 }
JSON 對象
JSON 對象在大括號({})中書寫:
對象可以包含多個名稱/值對:
這一點也容易理解,與這條 JavaScript 語句等價:
JSON 數組
JSON 數組在中括號中書寫:
數組可包含多個對象:
{
"sites": [ { "name":"菜鳥教程" , "url":"www.runoob.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" }
]
}
在上面的例子中,對象 "sites" 是包含三個對象的數組。每個對象代表一條關於某個網站(name、url)的記錄。
JSON 布爾值
JSON 布爾值可以是 true 或者 false:
{ "flag":true }
JSON null
JSON 可以設置 null 值:
{ "runoob":null }
JSON 使用 JavaScript 語法
因為 JSON 使用 JavaScript 語法,所以無需額外的軟件就能處理 JavaScript 中的 JSON。
通過 JavaScript,您可以創建一個對象數組,並像這樣進行賦值:
實例
var sites = [ { "name":"runoob" , "url":"www.runoob.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" } ];
可以像這樣訪問 JavaScript 對象數組中的第一項(索引從 0 開始):
sites[0].name;
返回的內容是:
runoob
可以像這樣修改數據:
sites[0].name="菜鳥教程";
使用Json庫:import json
json.dumps
json.dumps 用於將 Python 對象編碼成 JSON 字符串。
語法
#json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
# indent 縮進 indent = 4 表示縮進 4個單元格 # sort_keys=True 按 keys 進行排序展示 # separators 分離器 separators=(',', ': '),如果已經使用了縮進,則這個可以不使用,多余了,效果一樣。 json1 = json.dumps(data) print json1 # [{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}] json2 = json.dumps(data,sort_keys=True) print json2 # [{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}] json3 = json.dumps(data,sort_keys=False) print json3 # [{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}] testData =[{'name':u'周星馳','age':28}] jsonD = json.dumps(testData) print jsonD print json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': ')) #輸出結果 ''' { "a": "Runoob", "b": 7 } '''
python 原始類型向 json 類型的轉化對照表:
json.loads
語法
#語法 #json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]]) jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; testD = json.loads(jsonData) print testD #{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
json 類型轉換到 python 的類型對照表:
使用第三方庫:Demjson
Demjson 是 python 的第三方模塊庫,可用於編碼和解碼 JSON 數據,包含了 JSONLint 的格式化及校驗功能。
安裝
方法一:
下載地址:https://pypi.python.org/pypi/demjson/2.2.4
切換到目錄下 執行下面命令
python setup.py install
方法二:
執行命令
pip install demjson
成功后會在site-packages 新生成對應的文件及文件夾。
JSON 函數
encode
Python encode() 函數用於將 Python 對象編碼成 JSON 字符串。
語法
#-*-coding:utf-8-*- # Time:2017/9/22 21:25 # Author:YangYangJun import demjson data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ] #語法 #demjson.encode(self, obj, nest_level=0) json = demjson.encode(data) print json #[{"a":1,"b":2,"c":3,"d":4,"e":5}]
decode
Python 可以使用 demjson.decode() 函數解碼 JSON 數據。該函數返回 Python 字段的數據類型。
語法
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; #語法 #demjson.decode(self, txt) text = demjson.decode(json) print text #{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}