【Python進級】03、json


このセクションでは、Python言語を使用してJSONオブジェクトを符号化および復号する方法について説明します.
ここでの符号化とは、文字符号化ではなく、pythonオブジェクトをネットワーク上または他のメディア上で伝送可能なテキスト情報に変換することを意味する.
一、jsonの概要
JSON:JavaScript Object Notation(JavaScriptオブジェクト表現)
JSONはテキスト情報を格納・交換する構文である.XMLに似ています.
JSONはXMLより小さく、より速く、解析しやすい.
JSONはJavascript構文を使用してデータオブジェクトを記述しますが、JSONは言語とプラットフォームから独立しています.JSON解析器とJSONライブラリは多くの異なるプログラミング言語をサポートしています.現在、非常に多くのダイナミック(PHP、JSP、.NET)プログラミング言語がJSONをサポートしています.
JSON例
{
"sites": [
{ "name":"    " , "url":"www.runoob.com" }, 
{ "name":"google" , "url":"www.google.com" }, 
{ "name":"  " , "url":"www.weibo.com" }]}

このsitesオブジェクトは,3つのサイトレコード(オブジェクト)を含む配列である.
Pythonのようなdict
json構文規則:
  • データ名/値ペア
  • データカンマ区切り
  • かっこ保存オブジェクト
  • 角括弧保存配列
  • 二、jsonモジュール
    In [4]: import json
    
    In [5]: json.
    json.JSONDecoder  json.dump         json.load         
    json.JSONEncoder  json.dumps        json.loads        
    json.decoder      json.encoder      json.scanner

    encode
    PythonオブジェクトをJSON文字列に符号化
    decode
    エンコードされたJSON文字列をPythonオブジェクトに復号
    pythonとjsonは、次の構造変換をサポートします.
    |  Supports the following objects and types by default:
         |  
         |  +-------------------+---------------+
         |  | Python            | JSON          |
         |  +===================+===============+
         |  | dict              | object        |
         |  +-------------------+---------------+
         |  | list, tuple       | array         |
         |  +-------------------+---------------+
         |  | str, unicode      | string        |
         |  +-------------------+---------------+
         |  | int, long, float  | number        |
         |  +-------------------+---------------+
         |  | True              | true          |
         |  +-------------------+---------------+
         |  | False             | false         |
         |  +-------------------+---------------+
         |  | None              | null          |
         |  +-------------------+---------------+

    ケース:ユーザー情報を保存するjsonファイルがあり、jsonをUserクラスとして解析する必要があります.
    User = nametuple('User', ['name', 'age', 'gender', 'phone', 'mail'])
    [root@Node3 src]# cat text.json
    {
    "users": [
        {
            "name": "xj",
            "age": 25,
            "gender": "man",
            "phone": "15711112222",
            "mail": "[email protected]"
        }]
    }

    ソリューション:
    jsonを辞書として解析し,辞書を再処理する
    object_の使用hook
    In [3]: ret = json.load(open("/tmp/src/text.json"))
    
    In [4]: ret
    Out[4]: 
    {u'users': [{u'age': 25,
       u'gender': u'man',
       u'mail': u'[email protected]',
       u'name': u'xj',
       u'phone': u'15711112222'}]}
    
    In [5]: type(ret)
    Out[5]: dict
    
    In [6]: ret.
    ret.clear       ret.items       ret.pop         ret.viewitems
    ret.copy        ret.iteritems   ret.popitem     ret.viewkeys
    ret.fromkeys    ret.iterkeys    ret.setdefault  ret.viewvalues
    ret.get         ret.itervalues  ret.update      
    ret.has_key     ret.keys        ret.values    
    
    In [7]: ret['users']
    Out[7]: 
    [{u'age': 25,
      u'gender': u'man',
      u'mail': u'[email protected]',
      u'name': u'xj',
      u'phone': u'15711112222'}]
      
      
    In [16]: type(ret['users'])
    Out[16]: list
    
    In [17]: ret['users'][0]
    Out[17]: 
    {u'age': 25,
     u'gender': u'man',
     u'mail': u'[email protected]',
     u'name': u'xj',
     u'phone': u'15711112222'}
     
    In [19]: ret['users'][0]["age"]
    Out[19]: 25