PythonはJsonデータを処理する
18715 ワード
JSON(JavaScript Object Notation)は、軽量レベルのデータ交換フォーマットです.読みやすく、書きやすい.同時に機械の解析と生成も容易である.本文はPythonの中の関連する操作を簡単に紹介して、原文はPythonがJsonデータを処理することを参照します.
データフォーマットは、キー値ペアの集合(A collection of name/value pairs)と簡単に理解できる.異なる言語では、オブジェクト(object)、レコード(record)、構造(struct)、辞書(dictionary)、ハッシュテーブル(hash table)、キーリスト(keyed list)、または関連配列(associative array)として理解されます.値には、シーケンステーブル(An ordered list of values)があります.ほとんどの言語では、配列(array)として理解されています.
PyhtonのJsonモジュールは、メモリ内のオブジェクトをシーケンス化する方法を提供します.
タイプを確認すると、
直接
データ型対応
Python
Json
dict
object
list,tuple
array
str, unicode
string
int,long,float
number
True
true
False
false
None
null
いくつかのパラメータは、出力をよりよく制御することができます.よく見られるのは、
データフォーマットは、キー値ペアの集合(A collection of name/value pairs)と簡単に理解できる.異なる言語では、オブジェクト(object)、レコード(record)、構造(struct)、辞書(dictionary)、ハッシュテーブル(hash table)、キーリスト(keyed list)、または関連配列(associative array)として理解されます.値には、シーケンステーブル(An ordered list of values)があります.ほとんどの言語では、配列(array)として理解されています.
import json
PyhtonのJsonモジュールは、メモリ内のオブジェクトをシーケンス化する方法を提供します.
json.dumps
dump
の機能はPython
オブジェクトencode
をjsonオブジェクトとし、符号化プロセスである.注意json
モジュールはjson.dumps
とjson.dump
の方法を提供し、違いはdump
が直接ファイルに到着することであり、dumps
が文字列に到着することであり、ここでのs
はstring
と理解される.data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print 'DATA:', repr(data)
data_string = json.dumps(data)
print 'JSON:', data_string
DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]
JSON: [{"a": "A", "c": 3.0, "b": [2, 4]}]
タイプを確認すると、
string
オブジェクトが見つかります.print type(data)
print type(data_string)
json.dump
Python
オブジェクトをstring
に符号化するだけでなく、ファイルに書き込むこともできます.Python
オブジェクトを直接ファイルに書き込むことができないため、TypeError: expected a string or other character buffer object
をエラーとして報告し、シーケンス化する必要があります.data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
with open('output.json','w') as fp:
json.dump(data,fp)
cat output.json
[{"a": "A", "c": 3.0, "b": [2, 4]}]
json.loads
Python
内蔵オブジェクトdump
からjson
オブジェクトへの操作方法を知っています.では、json
オブジェクトdecode
からPython
識別可能なオブジェクトへの復号方法を知っていますか.はい、json.loads
メソッドを使用します.もちろん、これはstring
に基づいています.ファイルであれば、json.load
メソッドを使用することができます.decoded_json = json.loads(data_string)
# , list
print type(decoded_json)
# data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print decoded_json[0]['a']
A
json.load
直接
load
ファイルを使用できます.with open('output.json') as fp:
print type(fp)
loaded_json = json.load(fp)
# , list
print type(decoded_json)
# data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print decoded_json[0]['a']
A
データ型対応
json
およびPython
オブジェクト変換中、データ型が完全に一致せず、対応する.Python
Json
dict
object
list,tuple
array
str, unicode
string
int,long,float
number
True
true
False
false
None
null
json.dumps
共通パラメータいくつかのパラメータは、出力をよりよく制御することができます.よく見られるのは、
sort_keys
,indent
,separators
,skipkeys
などである.sort_keys
名前はよくわかりますが、出力時に辞書はランダムではなくボタン値でソートされます.data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print 'DATA:', repr(data)
unsorted = json.dumps(data)
print 'JSON:', json.dumps(data)
print 'SORT:', json.dumps(data, sort_keys=True)
DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]
JSON: [{"a": "A", "c": 3.0, "b": [2, 4]}]
SORT: [{"a": "A", "b": [2, 4], "c": 3.0}]
indent
は、よりインデントされ、構造をよりよく見ることができます.data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print 'DATA:', repr(data)
print 'NORMAL:', json.dumps(data, sort_keys=True)
print 'INDENT:', json.dumps(data, sort_keys=True, indent=2)
DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]
NORMAL: [{"a": "A", "b": [2, 4], "c": 3.0}]
INDENT: [
{
"a": "A",
"b": [
2,
4
],
"c": 3.0
}
]
separators
は区切り記号を提供し、白いスペースを出すことができ、出力がよりコンパクトで、データがより小さい.デフォルトの区切り文字は(', ', ': ')
で、白いスペースがあります.異なるdumps
パラメータは、対応するファイルのサイズが一目瞭然です.data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print 'DATA:', repr(data)
print 'repr(data) :', len(repr(data))
print 'dumps(data) :', len(json.dumps(data))
print 'dumps(data, indent=2) :', len(json.dumps(data, indent=2))
print 'dumps(data, separators):', len(json.dumps(data, separators=(',',':')))
DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]
repr(data) : 35
dumps(data) : 35
dumps(data, indent=2) : 76
dumps(data, separators): 29
json
辞書が必要なキーは文字列です.そうしないとValueError
が投げ出されます.data = [ { 'a':'A', 'b':(2, 4), 'c':3.0, ('d',):'D tuple' } ]
print 'First attempt'
try:
print json.dumps(data)
except (TypeError, ValueError) as err:
print 'ERROR:', err
print
print 'Second attempt'
print json.dumps(data, skipkeys=True)
First attempt
ERROR: keys must be a string
Second attempt
[{"a": "A", "c": 3.0, "b": [2, 4]}]