データ抽出のJSONとJsonPATH

9436 ワード

JSON(JavaScript Object Notation)はライト級のデータ交換形式であり、人々が読みやすいようにしています.同時に機械の解析と生成にも便利です.ウェブサイトのフロントとバックグラウンドの間のデータのインタラクションなど、データインタラクションを行うシーンに適しています.
JSONとXMLの比較は同じくらいです.
Python 2.7にはJSONモジュールがあります.直接import jsonで使えます.
公式文書:http://docs.python.org/library/json.html
Jsonオンライン解析サイト:http://www.json.cn/#
JSON
jsonは簡単に言えば、javascriptのオブジェクトと配列です.この2つの構造はオブジェクトと配列の2つの構造です.この2つの構造によって様々な複雑な構造が表現されます.
  • オブジェクト:オブジェクトはjsに{ }で囲まれたコンテンツを表し、データ構造は  { key:value, key:value, ... }のキーパッド値ペアの構成は、対象に向けた言語では、keyが対象の属性であり、valueが対応する属性値であるため、分かりやすく、値の取り方が対象であり、keyが属性値を取得するタイプは、数字、文字列、配列、オブジェクトの種類とすることができる.
  • 配列:配列はjsで中かっこ[ ]で囲まれた内容で、データ構造は  ["Python", "javascript", "C++", ...]、値の取り方はすべての言語と同じで、索引を用いて取得します.フィールド値の種類は、数字、文字列、配列、オブジェクトの数種類とすることができます.
  • import json
    jsonモジュールは、文字列とpythonデータタイプの間で変換する4つの機能を提供する.
    1.json.loads()
    Jsonフォーマットの文字列を復号してPythonオブジェクトに変換し、Jsonからpythonのタイプへの変換は以下の通りです.
    # json_loads.py
    
    import json
    
    strList = '[1, 2, 3, 4]'
    
    strDict = '{"city": "  ", "name": "  "}'
    
    json.loads(strList) 
    # [1, 2, 3, 4]
    
    json.loads(strDict) # json     Unicode  
    # {u'city': u'\u5317\u4eac', u'name': u'\u5927\u732b'}
    
    2.json.dumps()
    pythonタイプをjson文字列に変換して、strオブジェクトを返します.PythonオブジェクトをエンコードしてJson文字列に変換します.
    python元のタイプからjsonタイプへの変換は以下の通りです.
    # json_dumps.py
    
    import json
    import chardet
    
    listStr = [1, 2, 3, 4]
    tupleStr = (1, 2, 3, 4)
    dictStr = {"city": "  ", "name": "  "}
    
    json.dumps(listStr)
    # '[1, 2, 3, 4]'
    json.dumps(tupleStr)
    # '[1, 2, 3, 4]'
    
    #   :json.dumps()          ascii  
    #      ensure_ascii=False   ascii  , utf-8  
    # chardet.detect()    ,   confidence      
    
    json.dumps(dictStr) 
    # '{"city": "\\u5317\\u4eac", "name": "\\u5927\\u5218"}'
    
    chardet.detect(json.dumps(dictStr))
    # {'confidence': 1.0, 'encoding': 'ascii'}
    
    print json.dumps(dictStr, ensure_ascii=False) 
    # {"city": "  ", "name": "  "}
    
    chardet.detect(json.dumps(dictStr, ensure_ascii=False))
    # {'confidence': 0.99, 'encoding': 'utf-8'}
    
    chardetは非常に優れた符号化識別モジュールで、pipでインストールできます.
    3.json.dump()
    Python内蔵タイプをJsonオブジェクトにプログレッシブしてファイルに書き込みます.
    # json_dump.py
    
    import json
    
    listStr = [{"city": "  "}, {"name": "  "}]
    json.dump(listStr, open("listStr.json","w"), ensure_ascii=False)
    
    dictStr = {"city": "  ", "name": "  "}
    json.dump(dictStr, open("dictStr.json","w"), ensure_ascii=False)
    
    4.json.load()
    ファイルの中のjson形式の文字列の元素を読んでpythonタイプに転化します.
    # json_load.py
    
    import json
    
    strList = json.load(open("listStr.json"))
    print strList
    
    # [{u'city': u'\u5317\u4eac'}, {u'name': u'\u5927\u5218'}]
    
    strDict = json.load(open("dictStr.json"))
    print strDict
    # {u'city': u'\u5317\u4eac', u'name': u'\u5927\u5218'}
    
    JsonPath
    JsonPathは情報抽出クラスライブラリで、JSONドキュメントから指定情報を抽出するツールで、Javascript、Python、PHPとJavaを含む複数の言語の実現バージョンを提供します.
    JsonPathはJSONにとってXATHがXMLに相当する.
    ダウンロード先:https://pypi.python.org/pypi/jsonpath
    インストール方法:dumpsをクリックしてjsonpathをダウンロードし、解凍したらdumpを実行します.
    公式文書:http://goessner.net/articles/JsonPath
    JsonPathとXPS文法の比較:
    Jsonは構造がはっきりしていて、可読性が高く、複雑度が低く、非常によくマッチしています.
    XPTath
    JSONPath
    説明loadsloadルートノードDownload URLpython setup.py install現行ノード/$ or .サブノードを取る@n/a
    親ノードを取っても、Jsonspathはサポートされていません./.位置に関係なく、条件に合うすべての条件を選ぶことです.[]..すべての要素ノードにマッチ//n/a
    プロパティによると、Jsonはサポートされていません.JsonはKey-value再帰構造ですので、必要ありません...*シーズマリー表示(配列の下に表示されているような単純な反復操作ができます.内容によって値を選ぶなど)
    𞓜*ローズマリーをサポートします.@[]フィルタ操作をサポートします
    n/a[]式計算のサポート[,]n/a
    グループ、JsonPathはサポートされていません.
    例:
    私達はチェックアウトでネット都市のJSONファイルを作ります. http://www.lagou.com/lbs/getAllCitySearchLabels.json 例として、すべての都市を取得します.
    # jsonpath_lagou.py
    
    import urllib2
    import jsonpath
    import json
    import chardet
    
    url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json'
    request =urllib2.Request(url)
    response = urllib2.urlopen(request)
    html = response.read()
    
    #  json        python  
    jsonobj = json.loads(html)
    
    #       ,  name  
    citylist = jsonpath.jsonpath(jsonobj,'$..name')
    
    print citylist
    print type(citylist)
    fp = open('city.json','w')
    
    content = json.dumps(citylist, ensure_ascii=False)
    print content
    
    fp.write(content.encode('utf-8'))
    fp.close()
    
    注意事項:
    Json.loads()はJsonフォーマットの文字列を復号してPythonオブジェクトに変換するので、json.loadsの時にエラーが発生したら、復号されるJson文字の符号化に注意します.
    着信文字列のコードがUTF-8でない場合は、文字コードのパラメータを指定する必要があります.  []
    dataDict = json.loads(jsonStrGBK);
    
  • dataJsonsStrはJSON文字列であり、それ自体がUTF-8ではなくGBKであると仮定すると、上記のコードはエラーを引き起こし、対応するものに変更される.
  • dataJsonsStrがencodingを通じて適切な符号化を指定しているが、他の符号化された文字が含まれている場合は、まずdata JsonsをUnicodeに変換してから、符号化フォーマットを指定してjson.loadsを呼び出す必要がある()
  • .
      dataDict = json.loads(jsonStrGBK, encoding="GBK");
    
    dataJson StrUni=dataJson Str.decode(「GB 2312」);dataDict=json.loads(dataJson StrUni、encoding=「GB 2312」)
    ``` python
    
    ?()の役割は、他の符号化文字列をUnicode符号化に変換することである.()の役割は、Unicode符号化を他の符号化文字列に変換することである.()