javaEE 第七篇博客----JSON
一、JSON基本介紹:
1、JSON是一種基於文本的數據交換格式,它來自於web服務和其他連接應用程序中使用的JavaScript
2、JSON只定義了兩個數據結構:對象和數組。對象是一組名稱-值對,數組是值的列表。JSON定義了7種值類型:string、number、object、array、true、false和null。
3、JSON通常被用作一種常見的格式,用於序列化和反序列化在Internet上通信的應用程序中的數據。這些應用程序是使用不同的編程語言創建的,並且在非常不同的環境中運行。JSON適合這個場景,因為它是一個開放的標準,它很容易讀和寫,而且它比其他表示更緊湊。
4、JSON表示通常比XML表示更緊湊,因為JSON沒有結束標記。與XML不同,JSON並沒有一個廣泛接受的模式來定義和驗證JSON數據的結構。
5、對象模型創建了一個在內存中表示JSON數據的樹。然後可以對樹進行導航、分析或修改。這種方法是最靈活的,允許進行處理,這需要訪問樹的完整內容。但是,它通常比流模型要慢,需要更多的內存。對象模型通過一次導航整個樹來生成JSON輸出。
6、流模型使用基於事件的解析器,每次只讀取一個元素的JSON數據。當一個對象或數組開始或結束時,當它找到一個鍵,或者當它找到一個值時,解析器會生成事件並停止處理。應用程序代碼可以處理或丟棄每個元素,然後解析器繼續進行下一個事件。這種方法適合於本地處理,其中一個元素的處理不需要來自其他數據的信息。流模型通過一次使用一個元素調用一個函數來生成JSON輸出到給定的流。
JSON建構於兩種結構:
“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。
值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。
這些都是常見的數據結構。事實上大部分現代計算機語言都以某種形式支持它們。這使得一種數據格式在同樣基於這些結構的編程語言之間交換成為可能。
1.對簡單數據類型的encoding和decoding:
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)
print json.dumps([‘foo‘,{‘bar‘:(‘baz‘,None,1.0,2)}])
print json.dumps("\"foo\bar")
print json.dumps(u‘\u1234‘)
print json.dumps(‘\\‘)
print json.dumps({"c":0,"b":0,"a":0},sort_keys=True)
輸出:
["foo", {"bar": ["baz", null, 1.0, 2]}]
"\"foo\bar"
"\u1234"
"\\"
{"a": 0, "b": 0, "c": 0}
compact encoding:
#json主要是作為一種數據通信的格式存在的,而網絡通信是很在乎數據的大小的,無用的空格會占據很多通信帶寬,所以適當時候也要對數據進行壓縮。separator參數可以起到這樣的作用,該參數傳遞是一個元組,包含分割對象的字符串。
print json.dumps([1,2,3,{‘4‘:5,‘6‘:7}],separators=(‘,‘,‘:‘))
#indent參數是縮進的意思,它可以使得數據存儲的格式變得更加優雅。
print json.dumps([1,2,3,{‘4‘:5,‘6‘:7}],separators=(‘,‘,‘:‘),indent = 4)
2.decoding JSON
json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])www.2cto.com
print json.loads(‘["foo",{"bar":["baz",null,1.0,2]}]‘)
print json.loads(‘"\\"foo\\bar"‘)
輸出:
[u‘foo‘, {u‘bar‘: [u‘baz‘, None, 1.0, 2]}]
"foar
3.特殊JSON對象的解析
def as_complex(dct):
if ‘__complex__‘ in dct:
return complex(dct[‘real‘],dct[‘imag‘])
return dct
print json.loads(‘{"__complex__":true,"real":1,"imag":2}‘,object_hook=as_complex)
輸出:
(1+2j)
javaEE 第七篇博客----JSON