在Python中使用JSON


在Python中使用JSON

JSON介紹

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易於人閱讀和編寫。同時也易於機器解析和生成。 它基於JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成爲理想的數據交換語言。

引用自json.org

語法

結構

JSON只提供了兩種結構——字典和數組。也就是說,JSON可以存儲一對一或者一對多的鍵值對關係。

形式

對象

對象是一個無序的鍵值對集合。 一個對象以{開始,}結束。每個後跟一個:;鍵值對之間使用,分隔。 object

數組

數組是值的有序集合,一個鍵可以對應一個數組。 一個數組以[開始,]結束。值之間使用,分隔。 array

值可以是雙引號括起來的字符串、數值、true、false、 null、對象或者數組。這些結構可以嵌套。 value

字符串

字符串是由雙引號包圍的任意數量Unicode字符的集合,使用反斜線轉義。一個字符即一個單獨的字符串。 字符串與C/C++中的字符串非常相似,包括常見的各種轉義符號。 value

數值

數值與C/C++中的數值非常相似,但沒有八進制和十六進制格式。 number

空白

空白符號(包括空格,Tab以及回車)可以加入到任何符號之間,不會影響JSON的含義

Python中的JSON庫

以Python 3爲基準

編碼

對應類型

Python JSON
dict object
list, tuple array
str string
int, float number
True true
False false
None null

函數

我們使用JSON庫中的dump以及dumps函數來進行JSON編碼。dumpdumps各項參數含義基本一致,唯一區別在於dump函數編碼產生一個JSON文件流,而dumps編碼產生一個JSON字符串。

json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
  • obj:編碼對象
  • fp:指定文件流
  • skipkeys:若skipkeys爲真,則非標準類型將會跳過;否則返回TypeError
  • ensure_ascii:若ensure_ascii爲真,則輸出時將會確保沒有非ASCII字符;否則將會原樣輸出
  • check_circular:若check_circular爲真,則將會檢測是否存在循環調用;否則會跳過檢測
  • allow_nan:若allow_nan爲真,則將會允許存在空值(無窮大值);否則會返回ValueError
  • cls:若cls爲空值,則使用JSONEncoder;否則使用指定子類進行編碼
  • indent:若indent爲空值,則無縮進;否則使用指定值進行縮進
  • separators:若separators爲空值,則使用(',', ': ')分隔;否則使用指定的元組進行分隔
  • default:若default爲空值,則使用自帶的default方法;否則使用指定值
  • sort_keys:若sort_keys爲真,則輸出將會按照鍵進行排序

示範

>>> import json

>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'

# 排序
>>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
{"a": 0, "b": 0, "c": 0}

# 分隔符
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',', ':'))
'[1,2,3,{"4":5,"6":7}]'

# Unicode輸出
>>> json.dumps("\u5317\u4eac", ensure_ascii=False)
'北京'

解碼

對應類型

JSON Python
object dict
array list
string str
number (int) int
number (real) float
true True
false False
null None

函數

我們使用JSON庫中的load以及loads函數來進行JSON解碼。loadloads各項參數含義基本一致,唯一區別在於load函數用於解碼JSON文件流,而loads用於解碼JSON字符串。

json.load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
  • fp:指定文件流
  • s:指定字符串
  • encoding:指定字符串編碼
  • cls:若cls爲空值,則使用JSONEncoder;否則使用指定子類進行編碼
  • object_hook:若object_hook爲空值,對象則返回解碼器dict;否則使用自定義類型返回
  • parse_float:若parse_float爲空,則JSON浮點數轉換爲浮點數;否則轉換爲指定類型
  • parse_int:若parse_int爲空,則JSON整數轉換爲整數;否則轉換爲指定類型
  • parse_constantparse_constant爲空,則不會處理非法輸入;否則拋出異常
  • object_pairs_hook:若object_pairs_hook爲空值,則數組返回解碼器dict;否則使用自定義類型返回

示範

>>> import json

>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
['foo', {'bar': ['baz', None, 1.0, 2]}]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章