前言
使用python做開發,經常會遇到json數據解析問題,本文,我將帶領大家學習使用python3處理json數據,並將字典反轉義為json數據。
一、基礎知識
1.什麼是JSON
JSON是一種輕量級的數據交換格式,便於任何機器理解,採用完全獨立於程式語言的文本格式來存儲和表示數據。
2.JSON格式
JSON具有以下這些形式:
對象是一個無序的「『名稱/值』對」集合。一個對象以 {左括號 開始, }右括號 結束。每個「名稱」後跟一個 :冒號 ;「『名稱/值』 對」之間使用 ,逗號 分隔。
舉例分析如下:
{"name":"Brown", "age":18}
{"name":"Brown","famliy":{"mother":"Serinda","father":"Mike"}}
{"name":"Brown","pet":["dog","cat"]}
來一個複雜的son格式數據:
{"name": "中國", "province": [{"name": "黑龍江","cities": {"city": ["哈爾濱", "大慶"]}}, {"name": "廣東","cities": {"city": ["廣州", "深圳", "珠海"]}}, {"name": "臺灣","cities": {"city": ["臺北", "高雄"]}}, {"name": "新疆","cities": {"city": ["烏魯木齊"]}}]}
3.pyhton的JSON庫
二、實例運行
1.解析最簡單的json數據
程序:
# -*- coding: utf-8 -*-
import json
json_str = "{\"name\":\"Brown\",\"age\":16}"
if __name__ == '__main__':
json_dict = json.loads(json_str)
print(json_dict)
運行結果:
2.解析一個複雜一點的json數據
程序:
# -*- coding: utf-8 -*-
import json
json_str = "{\"name\": \"中國\", \"province\": [{\"name\": \"黑龍江\",\"cities\": {\"city\": [\"哈爾濱\", \"大慶\"]}}, {\"name\": \"廣東\",\"cities\": {\"city\": [\"廣州\", \"深圳\", \"珠海\"]}}, {\"name\": \"臺灣\",\"cities\": {\"city\": [\"臺北\", \"高雄\"]}}, {\"name\": \"新疆\",\"cities\": {\"city\": [\"烏魯木齊\"]}}]}"
if __name__ == '__main__':
json_dict = json.loads(json_str)
print(json_dict)
# 使用字典 得出廣東的核心城市
province = json_dict["province"]
for obj in province:
if ("廣東" == obj["name"]):
print(obj["cities"]["city"])
運行結果:
本例中,我們不僅將json字符串解析為python字典格式,並找出廣東省的核心城市
3.將字典數據轉換為json數據
程序:
# -*- coding: utf-8 -*-
import json
json_str = "{\"name\": \"中國\", \"province\": [{\"name\": \"黑龍江\",\"cities\": {\"city\": [\"哈爾濱\", \"大慶\"]}}, {\"name\": \"廣東\",\"cities\": {\"city\": [\"廣州\", \"深圳\", \"珠海\"]}}, {\"name\": \"臺灣\",\"cities\": {\"city\": [\"臺北\", \"高雄\"]}}, {\"name\": \"新疆\",\"cities\": {\"city\": [\"烏魯木齊\"]}}]}"
if __name__ == '__main__':
print("################ json.loads() ################")
json_dict = json.loads(json_str)
print(json_dict)
# 使用字典 得出廣東的核心城市
province = json_dict["province"]
for obj in province:
if ("廣東" == obj["name"]):
print(obj["cities"]["city"])
# 將字典數據轉換為json數據
print("################ json.dumps() ################")
str_data = json.dumps(json_dict, ensure_ascii=False)
print(str_data)
運行結果:
可以看到本例中,調用json.dumps()後,原來json字符串中的中文數字發生了編碼格式的變化,這是由於json.dumps()默認採用ascii格式,關閉ascii即可,修改上述json.dumps(json_dict)為:
str_data = json.dumps(json_dict, ensure_ascii=False)
運行結果如下:
三、結語
(1)josn.dumps編碼格式問題
如果需要將帶有中文的字典通過json.dumps轉換為JSON字符串,需要添加ensure_ascii=False參數。
小驛:
寄語:世界上最遠的距離是魚與飛鳥的距離,一個在天上,一個卻深淺海底!