データ抽出のJSONとJsonPATH
9436 ワード
JSON(JavaScript Object Notation)はライト級のデータ交換形式であり、人々が読みやすいようにしています.同時に機械の解析と生成にも便利です.ウェブサイトのフロントとバックグラウンドの間のデータのインタラクションなど、データインタラクションを行うシーンに適しています.
JSONとXMLの比較は同じくらいです.
Python 2.7にはJSONモジュールがあります.直接
公式文書:http://docs.python.org/library/json.html
Jsonオンライン解析サイト:http://www.json.cn/#
JSON
jsonは簡単に言えば、javascriptのオブジェクトと配列です.この2つの構造はオブジェクトと配列の2つの構造です.この2つの構造によって様々な複雑な構造が表現されます.オブジェクト:オブジェクトはjsに 配列:配列はjsで中かっこ import json
jsonモジュールは、文字列とpythonデータタイプの間で変換する4つの機能を提供する.
1.json.loads()
Jsonフォーマットの文字列を復号してPythonオブジェクトに変換し、Jsonからpythonのタイプへの変換は以下の通りです.
pythonタイプをjson文字列に変換して、strオブジェクトを返します.PythonオブジェクトをエンコードしてJson文字列に変換します.
python元のタイプからjsonタイプへの変換は以下の通りです.
3.json.dump()
Python内蔵タイプをJsonオブジェクトにプログレッシブしてファイルに書き込みます.
ファイルの中のjson形式の文字列の元素を読んでpythonタイプに転化します.
JsonPathは情報抽出クラスライブラリで、JSONドキュメントから指定情報を抽出するツールで、Javascript、Python、PHPとJavaを含む複数の言語の実現バージョンを提供します.
JsonPathはJSONにとってXATHがXMLに相当する.
ダウンロード先:https://pypi.python.org/pypi/jsonpath
インストール方法:
公式文書:http://goessner.net/articles/JsonPath
JsonPathとXPS文法の比較:
Jsonは構造がはっきりしていて、可読性が高く、複雑度が低く、非常によくマッチしています.
XPTath
JSONPath
説明
親ノードを取っても、Jsonspathはサポートされていません.
プロパティによると、Jsonはサポートされていません.JsonはKey-value再帰構造ですので、必要ありません.
𞓜
n/a
グループ、JsonPathはサポートされていません.
例:
私達はチェックアウトでネット都市のJSONファイルを作ります. http://www.lagou.com/lbs/getAllCitySearchLabels.json 例として、すべての都市を取得します.
Json.loads()はJsonフォーマットの文字列を復号してPythonオブジェクトに変換するので、json.loadsの時にエラーが発生したら、復号されるJson文字の符号化に注意します.
着信文字列のコードがUTF-8でない場合は、文字コードのパラメータを指定する必要があります. dataJsonsStrはJSON文字列であり、それ自体がUTF-8ではなくGBKであると仮定すると、上記のコードはエラーを引き起こし、対応するものに変更される. dataJsonsStrがencodingを通じて適切な符号化を指定しているが、他の符号化された文字が含まれている場合は、まずdata JsonsをUnicodeに変換してから、符号化フォーマットを指定してjson.loadsを呼び出す必要がある() .
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つの構造によって様々な複雑な構造が表現されます.
{ }
で囲まれたコンテンツを表し、データ構造は { key:value, key:value, ... }
のキーパッド値ペアの構成は、対象に向けた言語では、keyが対象の属性であり、valueが対応する属性値であるため、分かりやすく、値の取り方が対象であり、keyが属性値を取得するタイプは、数字、文字列、配列、オブジェクトの種類とすることができる.[ ]
で囲まれた内容で、データ構造は ["Python", "javascript", "C++", ...]
、値の取り方はすべての言語と同じで、索引を用いて取得します.フィールド値の種類は、数字、文字列、配列、オブジェクトの数種類とすることができます.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'}
JsonPathJsonPathは情報抽出クラスライブラリで、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
説明
loads
load
ルートノードDownload URL
python 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);
dataDict = json.loads(jsonStrGBK, encoding="GBK");
dataJson StrUni=dataJson Str.decode(「GB 2312」);dataDict=json.loads(dataJson StrUni、encoding=「GB 2312」)``` python
?()
の役割は、他の符号化文字列をUnicode符号化に変換することである.()
の役割は、Unicode符号化を他の符号化文字列に変換することである.()