目錄
一 json介紹
json是什么?
用處
Json 和 XML 對比
各語言對Json的支持情況
Json規范詳解
二?python數據和json數據的相互轉換
dumps() : 轉換成json
loads(): 轉換成python數據
?總結
一 json介紹
json是什么?
實質上是一條字符串
是一種文本數據格式,
是一種文本規范
是一種字符串規范
用處
一般適合文本量不大,且需要記錄樹形結構的數據 或 需要靈活擴展數據
Json 和 XML 對比
Json文本
?? ?更簡潔易懂,對人更友好
?? ?適合數據量不大,結構不復雜的場景 (如:后端接口的參數)
?? ?比XML更小、更快、更易解析
XML 文本
?? ?程序處理更方便,對機器更友好
?? ?適合數據量大,結構復雜的場景(如:HTML是基于XML的)
?
各語言對Json的支持情況
1 Json實質上是一條字符串,程序中使用json,需要特定的方法轉換為對象變量才能使用
2 Json是一種文本規范,各語言對Json的支持情況:
JavaScript:原生支持 ? ?√
Python:原生支持.import json ? √
Java:原生不支持,需要引入Gson或FastJson
C++:原生不支持,引入Jsoncpp等庫
Json規范詳解
支持6種類型的值
1 字符串 ?如 "test String"?? ?
?? ?字符串中如果有雙引號,需要使用\轉義,如"test \" String"
2 數字 ?如 0.2 999 -1.1
?? ?可以是整數、浮點數(小數)
?? ?
3 布爾值 true false
4 null (空值)
5 對象 可嵌套數據,如 {"key1":"value1","key2":"value2"}
?? ?包含在一對{}之內
?? ?用,隔開多個鍵值對
?? ?*鍵值對的 鍵 必須為字符串
?? ?*鍵值對的 值 可以是6種值類型的任意一種,且無需統一類型
?? ?{"key1":"value1","key2":true,"key3":{},"key4":23}
6 數組 可嵌套數據,如 ["value1","value2","value3"]
?? ?包含在一對[]之內的
?? ?單個數組內的多個值用,隔開
?? ?數組內的值可以是Json支持的6種值的任意一種
?? ?單個數組內的多個值無需統一類型
備注:
Json文本中多余的空格、換行不會有實質的影響,僅僅是為了方便閱讀
二?python數據和json數據的相互轉換
dumps() : 轉換成json
import json
#準備列表
data=[{"姓名":"小明","年齡":"12"},{"姓名":"小紅","年齡":"13"},{"姓名":"小李","年齡":"8"}]
#轉換成json
# 有中文的時候加 ensure_ascii=False
json_str = json.dumps(data,ensure_ascii=False)
print(json_str)
print(type(json_str))
#準備字典
#轉換成json
dic1={"水果":"西瓜","蔬菜":"胡蘿卜","蛋白質":"牛肉"}
json_str2 = json.dumps(dic1,ensure_ascii=False)
print(json_str2)
print(type(json_str2))
?json實質上就是字符串str?
loads(): 轉換成python數據
import json
#準備json數據
s1='[{"姓名":"小明","年齡":"12"},{"姓名":"小紅","年齡":"13"},{"姓名":"小李","年齡":"8"}]'
#轉換成列表
l1 = json.loads(s1)
print(l1)
print(type(l1))
#準備json數據
#轉換成字典
s2='{"水果":"西瓜","蔬菜":"胡蘿卜","蛋白質":"牛肉"}'
d1 = json.loads(s2)
print(d1)
print(type(d1))