ホームページ  >  記事  >  バックエンド開発  >  Python による Json_python の解析についての深い理解

Python による Json_python の解析についての深い理解

不言
不言オリジナル
2018-04-02 17:26:051452ブラウズ

Json は、軽量で読み書きが容易であるという特徴により、インターネットで広く使用されているデータ交換構造です。以下の記事ではPythonによるJson解析に関する情報を中心に紹介していますので、困っている方はぜひ参考にしてみてください。

JSON の概要

JSON (JavaScript Object Notation) は軽量のデータ交換形式です。これは、JavaScript のサブセット (標準 ECMA-262 第 3 版 - 1999 年 12 月) に基づいています。 JSON は完全に言語に依存しないテキスト形式を使用しますが、C 言語ファミリー (C、C++、C#、Java、JavaScript、Perl、Python など) に似た規則も使用します。これらの特性により、JSON は理想的なデータ交換言語になります。人間にとっては読み書きが簡単で、機械にとっては解析と生成が簡単です。

その形式は一般に次のとおりです:

オブジェクトは、「名前と値のペア」の順序付けされていないコレクションです。オブジェクトは「{」(左括弧)で始まり「}」(右括弧)で終わります。各「名前」の後には「:」 (コロン) が続き、「名前と値」のペアは「,」 (カンマ) で区切られます。

例:


{"b": "Hello", "c": null, "a": true}


その値は、文字列、数値、true、false、null、オブジェクト、または二重引用符で囲まれた配列 (配列) にすることができます。これらの構造は入れ子にすることができます。


値には、文字列、数値、true、false、null、オブジェクト、または二重引用符で囲まれた配列を指定できます。これらの構造は入れ子にすることができます。

Python を使用して Json をエンコードおよび解析する

Python には、json 操作を完了するのに役立つ組み込みの json パッケージがあります。

Python の辞書構造を json にエクスポートするには、json.dumps() を使用します。json を Python の辞書構造に読み取るには、json.loads() を使用します。 json.dumps() ,将json读成Python的字典结构,使用json.loads()

如果不是针对string操作而是对文件操作,分别使用json.load()函数和json.dump()函数。


import json
 
data = {
 'name' : 'ACME',
 'shares' : 100,
 'price' : 542.23
}
 
json_str = json.dumps(data)
data = json.loads(json_str)
 
# Writing JSON data to file
with open('data.json', 'w') as f:
 json.dump(data, f)
 
# Reading data back
with open('data.json', 'r') as f:
 data = json.load(f)


默认的类型对应如下:


JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

其他数据类型与Json之间的编码和解码

一般来说,Python对json的解析是list或dict之间的操作,如果需要其他类型与json之间转换,就需要object_hook参数。先定义一个类,将类的字典初始化成json的key-value键值对。这样,json的参数就变成了类的属性。

将一个JSON字典转换为一个Python对象Python


>>> class JSONObject:
...  def __init__(self, d):
...   self.__dict__ = d
...
>>>
>>> data = json.loads(s, object_hook=JSONObject)
>>> data.name
'ACME'
>>> data.shares
50
>>> data.price
490.1


还可以通过指定“函数”来进行转换。

用函数来指定序列化的方法,即将对象的“属性-值”对变成字典对,函数返回一个字典,然后json.dumps会格式化这个字典。

如果是通过函数将json变成对象,首先获得类名,然后通过__new__

文字列操作ではなくファイル操作の場合は、それぞれ json.load() 関数と json.dump() 関数を使用します。

def serialize_instance(obj):
 d = { '__classname__' : type(obj).__name__ }
 d.update(vars(obj))
 return d
 
# Dictionary mapping names to known classes
classes = {
 'Point' : Point
}
 
def unserialize_object(d):
 clsname = d.pop('__classname__', None)
 if clsname:
  cls = classes[clsname]
  obj = cls.__new__(cls) # Make instance without calling __init__
  for key, value in d.items():
   setattr(obj, key, value)
  return obj
 else:
  return d



デフォルトのタイプは以下に対応します:

なし
JSON Python
object dict
array リスト
文字列 unicode
数値 (int) td> int、long
数値 (実数) float
true True
false False
null


他のデータ型と Json の間のエンコードとデコード


一般的に言えば、Python の json 解析は list または dict 操作の間で行われます。他の型と json の間で変換する必要がある場合は、object_hook パラメーターが必要です。まずクラスを定義し、クラス ディクショナリを json キーと値のペアに初期化します。このようにして、json のパラメータがクラスの属性になります。

JSON辞書をPythonオブジェクトに変換する Python

>>> p = Point(2,3)
>>> s = json.dumps(p, default=serialize_instance)
>>> s
'{"__classname__": "Point", "y": 3, "x": 2}'
>>> a = json.loads(s, object_hook=unserialize_object)
>>> a
<__main__.Point object at 0x1017577d0>
>>> a.x
2
>>> a.y
3

「関数」を指定して変換することもできます。

関数を使用してシリアル化方法を指定します。つまり、オブジェクトの「属性と値」のペアを辞書のペアに変換します。関数は辞書を返し、json.dumps によってフォーマットされます。辞書。


関数を使用して json をオブジェクトに変換する場合は、まずクラス名を取得し、次に __new__ を通じて (初期化関数を呼び出さずに) オブジェクトを作成し、次に json 辞書の各属性を割り当てます。オブジェクトに。


Pythonのjson変換方法を指定する関数を使用します

rrreee🎜🎜🎜🎜🎜使用方法は以下の通りです: 🎜🎜🎜🎜🎜rrreee🎜🎜🎜🎜 🎜 🎜詳しい説明PythonによるJSONの解析🎜🎜🎜 🎜PythonによるJson文字列の判定方法の例🎜🎜🎜🎜 Pythonによるjsonの動作概要を深く理解する🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜

以上がPython による Json_python の解析についての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。