<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## json 就傳遞數據而言,xml是一種選擇,還有另外一種,就是json,它是一種輕量級的數據交換格式,如果讀者要做web編程,是會用到它的。根據維基百科的相關內容,對json了解一二: > JSON(JavaScript Object Notation)是一種由道格拉斯·克羅克福特構想設計、輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文本格式,並且採用了類似於C語言家族的一些習慣。 關于json更為詳細的內容,可以參考其官方網站:[http://www.json.org](http://www.json.org/) 從官方網站上摘取部分,了解一下json的結構: > JSON建構于兩種結構: * “名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。 * 值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。 python標準庫中有json模塊,主要是執行序列化和反序列化功能: * 序列化:encoding,把一個python對象編碼轉化成json字符串 * 反序列化:decoding,把json格式字符串解碼轉換為python數據對象 ### [](https://github.com/qiwsir/StarterLearningPython/blob/master/227.md#基本操作)基本操作 json模塊相對xml單純了很多: ~~~ >>> import json >>> json.__all__ ['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONEncoder'] ~~~ **encoding: dumps()** ~~~ >>> data = [{"name":"qiwsir", "lang":("python", "english"), "age":40}] >>> print data [{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}] >>> data_json = json.dumps(data) >>> print data_json [{"lang": ["python", "english"], "age": 40, "name": "qiwsir"}] ~~~ encoding的操作是比較簡單的,請注意觀察data和data_json的不同——lang的值從元組編程了列表,還有不同: ~~~ >>> type(data_json) <type 'str'> >>> type(data) <type 'list'> ~~~ 將python對象轉化為json類型,是按照下表所示對照關系轉化的: | python==> | json | | --- | --- | | dict | object | | list, tuple | array | | str, unicode | string | | int, long, float | number | | True | true | | False | false | | None | null | **decoding: loads()** decoding的過程也像上面一樣簡單: ~~~ >>> new_data = json.loads(data_json) >>> new_data [{u'lang': [u'python', u'english'], u'age': 40, u'name': u'qiwsir'}] ~~~ 需要注意的是,解碼之后,并沒有將元組還原。 解碼的數據類型對應關系: | json==> | python | | --- | --- | | object | dict | | array | list | | string | unicode | | number(int) | int, long | | number(real) | float | | true | True | | false | False | | null | None | **對人友好** 上面的data都不是很長,還能湊合閱讀,如果很長了,閱讀就有難度了。所以,json的dumps()提供了可選參數,利用它們能在輸出上對人更友好(這對機器是無所謂的)。 ~~~ >>> data_j = json.dumps(data, sort_keys=True, indent=2) >>> print data_j [ { "age": 40, "lang": [ "python", "english" ], "name": "qiwsir" } ] ~~~ `sort_keys=True`意思是按照鍵的字典順序排序,`indent=2`是讓每個鍵值對顯示的時候,以縮進兩個字符對齊。這樣的視覺效果好多了。 ### [](https://github.com/qiwsir/StarterLearningPython/blob/master/227.md#大json字符串)大json字符串 如果數據不是很大,上面的操作足夠了。但是,上面操作是將數據都讀入內存,如果太大就不行了。怎么辦?json提供了`load()`和`dump()`函數解決這個問題,注意,跟上面已經用過的函數相比,是不同的,請仔細觀察。 ~~~ >>> import tempfile #臨時文件模塊 >>> data [{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}] >>> f = tempfile.NamedTemporaryFile(mode='w+') >>> json.dump(data, f) >>> f.flush() >>> print open(f.name, "r").read() [{"lang": ["python", "english"], "age": 40, "name": "qiwsir"}] ~~~ ### [](https://github.com/qiwsir/StarterLearningPython/blob/master/227.md#自定義數據類型)自定義數據類型 一般情況下,用的數據類型都是python默認的。但是,我們學習過類后,就知道,自己可以定義對象類型的。比如: 以下代碼參考:[Json概述以及python對json的相關操作](http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html) ~~~ #!/usr/bin/env python # coding=utf-8 import json class Person(object): def __init__(self,name,age): self.name = name self.age = age def __repr__(self): return 'Person Object name : %s , age : %d' % (self.name,self.age) def object2dict(obj): #convert Person to dict d = {} d['__class__'] = obj.__class__.__name__ d['__module__'] = obj.__module__ d.update(obj.__dict__) return d def dict2object(d): #convert dict ot Person if '__class__' in d: class_name = d.pop('__class__') module_name = d.pop('__module__') module = __import__(module_name) class_ = getattr(module, class_name) args = dict((key.encode('ascii'), value) for key,value in d.items()) #get args inst = class_(**args) #create new instance else: inst = d return inst if __name__ == '__main__': p = Person('Peter',40) print p d = object2dict(p) print d o = dict2object(d) print type(o), o dump = json.dumps(p, default=object2dict) print dump load = json.loads(dump, object_hook=dict2object) print load ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看