python怎么使用json_Python JSON的简单使用
1 json簡介
1.1 json是什么?
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。
“在JSON出現之前,大家一直用XML來傳遞數據。因為XML是一種純文本格式,所以它適合在網絡上交換數據。XML本身不算復雜,但是,加上DTD、XSD、XPath、XSLT等一大堆復雜的規范以后,任何正常的軟件開發人員碰到XML都會感覺頭大了,最后大家發現,即使你努力鉆研幾個月,也未必搞得清楚XML的規范。
終于,在2002年的一天,道格拉斯·克羅克福特(Douglas Crockford)同學為了拯救深陷水深火熱同時又被某幾個巨型軟件企業長期愚弄的軟件工程師,發明了JSON這種超輕量級的數據交換格式。”
1.2 json特點
json格式適合閱讀,容易理解,對計算機來說處理起來也很方便。json文本格式與C家族語言(C,C++,C#,Java,JavaScript,Perl,Python以及許多其他語言)的傳統變量非常的相似,它的文本語言建立在以下兩種結構上:
l “名稱/值”對的無序集合(以下簡稱鍵值對),在其他編程語言中,這種“名稱/值”對可能稱為對象、記錄、結構、字典、哈希表、鍵表或者關聯數組。
l “值”的有序列表,對應其他語言中的數組,向量,鏈表或者序列。
上面這些基本的數據結構,幾乎所有現代語言都能支持其中一種或多種,因此json作為一種數據交換格式就理所當然了。
1.3 json格式
名稱(key/name):用雙引號包含的字符串。
值(value)可以是雙引號包含的字符串,真假值(true,false),空(null),對象或者數組,也就是說可以是嵌套結構。
對象(object)是無序鍵值對的集合:以左花括弧“{”開始,右花括弧“}”結束,每個對名稱(name)與值(value)之間使用“:”分隔,鍵值對之間使用逗號“,”分隔。
數組(array)是有序值的序列:array以左方括弧“[”開始,右方括弧“]”結束,值與值之間使用逗號“,”分隔。
字符串(string)是使用雙引號包含的數個(可以是0個)連續unicode字符,使用反斜杠“\”作為轉義字符,類似C語言和Java中的字符串。
整數(number)除了不支持8進制和16進制,其他特性與C語言和Java語言整數相同。
2 Python3 JSON使用
Python內置可以處理JSON數據的包:
1 import json
在Python中,JSON數據表示為一個字符串
1 json_data = '{"name": "Bob", "languages": ["Python", "Java"]}'
json數據還可以從文件中讀取,Python中的常用JSON方法如下:
函數
描述
json.dumps()
將Python對象編碼成JSON字符串
json.loads()
將已編碼的JSON字符串解碼為Python對象
2.1 在Python中解析JSON
使用Python JSON包中的json.loads()函數可以輕松解析JSON字符串和JSON文件為Python對象。
例1:在Python中將JSON解析為dict
1 importjson2
3 person = '{"name": "Bob", "languages": ["English", "Fench"]}'
4 person_dict =json.loads(person)5
6 #Output: {'name': 'Bob', 'languages': ['English', 'Fench']}
7 print( person_dict)8
9 #Output: ['English', 'French']
10 print(person_dict['languages'])
例2:在Python中讀取JSON文件并解析person是JSON字符串,person_dict是Python dict對象。
假設你的如下JSON數據存放在名字為“person.json”的文件中
1 {"name": "Bob",2 "languages": ["English", "Fench"]3 }
可以使用如下方式解析該文件中的JSON數據:
1 importjson2
3 with open('path_to_file/person.json') as f:4 data =json.load(f)5
6 #Output: {'name': 'Bob', 'languages': ['English', 'Fench']}
7 print(data)
代碼中使用open()函數打開文件,使用json.load()函數解析JSON數據,將解析得到的數據放在data變量。
JSON字符串在解析到Python對象時的默認數據對應見下表
JSON
Python
object
dict
array
list
string
unicode
number (int)
int, long
number (real)
float
true
True
false
False
null
None
2.2 將Python數據打包成json字符串
使用Python JSON包中的json.dumps()函數可以將Python數據打包成JSON字符串。
例3:將dict轉成JSON
1 importjson2
3 person_dict = {'name': 'Bob',4 'age': 12,5 'children': None6 }7
8 person_json =json.dumps(person_dict)9
10 #Output: {"name": "Bob", "age": 12, "children": null}
11 print(person_json)
例4:將JSON數據寫入文件
上面的程序中,打開一個文件名為“person.txt”的文件,打開模式為寫入“w”,如果文件不存在,就會自動新建一個。接著使用json.dump()函數將person_dict數據打包成JSON字符串,寫入到打開的文件中。
程序運行后會在該代碼所在目錄生成person.txt文件,文件內容應該如下;
1 {"name": "Bob", "languages": ["English", "Fench"], "married": true, "age": 32}
2.3 格式化輸出JSON數據
為了分析JSON數據,我們可能需要以閱讀友好的格式輸出JSON數據。通過向json.dumps()函數傳遞格式控制參數indent和sort_keys可以實現該功能。
例5:格式化打印json數據
1 importjson2
3 person_string = '{"name": "Bob", "languages": "English", "numbers": [2, 1.6, null]}'
4
5 #Getting dictionary
6 person_dict =json.loads(person_string)7
8 #Pretty Printing JSON string back
9 print(json.dumps(person_dict, indent = 4, sort_keys=True))
上述參數意思為:縮進4個空格,對鍵值對進行升序排序,運行后輸出結果如下:
1 {2 "languages": "English",3 "name": "Bob",4 "numbers": [5 2,6 1.6,7 null8 ]9 }
可以看到,輸出結果多了換行和縮進,看起來整潔多了。
Python對象在打包為JSON字符串過程中默認數據對應見下表
Python
JSON
dict
object
list, tuple
array
str
string
int, float, int- & float-derived Enums
number
True
true
False
false
None
null
3 json數據樣例
1 {2 "firstName": "John",3 "lastName": "Smith",4 "isAlive": true,5 "age": 27,6 "address": {7 "streetAddress": "21 2nd Street",8 "city": "New York",9 "state": "NY",10 "postalCode": "10021-3100"
11 },12
13 "phoneNumbers": [14 {15 "type": "home",16 "number": "212 555-1234"
17 },18 {19 "type": "office",20 "number": "646 555-4567"
21 },22 {23 "type": "mobile",24 "number": "123 456-7890"
25 }26 ],27 "children": [],28 "spouse": null29 }
4 參考鏈接
總結
以上是生活随笔為你收集整理的python怎么使用json_Python JSON的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python读取文本并且替换_lin如何
- 下一篇: websocket python爬虫_p