JSON( 'JavaScript Object Notation'の略)は、さまざまなアプリケーション間のデータ交換を容易にするテキストベースの形式です。たとえば、アプリケーション C ++で書かれています Windowsで実行すると、Pythonで記述され、Linuxで実行されているアプリケーションとJSONデータを簡単に交換できます。その単純さと柔軟性により、特に以前のXMLベースの形式よりも、近年広く使用されるようになりました。
ほぼすべての言語と環境からJSONを解析および生成するために使用できるライブラリとツールキットがあります。この記事では、Pythonを使用してJSONを処理することから生じるメソッドと問題に焦点を当てています。
いくつかのJSONサンプル
遭遇する最も一般的なJSONエンティティは 物体 :以下に示す形式のKey-Valueマッピングのセット。
充電器を機能させる方法
person.json:
{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}
オブジェクトの配列を表す方法は次のとおりです。この表現では、配列の各項目はオブジェクトです。以下は野球選手の給与のサンプルです。
salaries.json:
[ {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'barkele01',
'salary' : 870000
}, {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'bedrost01',
'salary' : 550000
} ]
もちろん、スカラーの配列を表すこともできます。これは次のようになります。
[
'hello',
'world',
35
]
PythonでのJSONの解析
Pythonは json JSONの解析と、PythonオブジェクトおよびリストからのJSONの生成の両方に使用できるモジュール。
次のコードスニペットは、JSONファイルを開いてデータを変数にロードする方法を示しています。
import json
with open('sample.json', 'r') as fp:
obj = json.load(fp)
JSONデータを含む文字列がある場合、次のようにしてPythonオブジェクト(またはリスト)に変換できます。
ラップトップを接続したままにしておくのは悪いことですか
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')
JSON URLを解析するには、次を使用してURLオブジェクトを作成できます。 urllib2 と使用 json.load() 従来通り。
import urllib2, json
url = urllib2.urlopen('http://site.com/sample.json')
obj = json.load(url)
エラーの処理
JSONにエラーがあると、 ValueError 。あなたはそれを処理し、必要に応じて是正措置を取ることができます。
try:
obj = json.loads('''{
'firstName': 'Alice',
'lastName: 'Hall',
'age': 35
}''')
except ValueError:
print('error loading JSON')
コマンドラインからのJSONの解析
場合によっては、Pythonコマンドラインを使用してJSONを解析すると、エラーをチェックしたり、適切にインデントされた出力を取得したりするのに役立つことがあります。
cat glossary.json
# prints
{'glossary': {'GlossDiv': {'GlossList': {'GlossEntry': {'GlossDef': {'GlossSeeAlso': ['GML', 'XML'], 'para': 'A meta-markup language, used to create markup languages such as DocBook.'}, 'GlossSee': 'markup', 'Acronym': 'SGML', 'GlossTerm': 'Standard Generalized Markup Language', 'Abbrev': 'ISO 8879:1986', 'SortAs': 'SGML', 'ID': 'SGML'}}, 'title': 'S'}, 'title': 'example glossary'}}
上記のJSONファイルからインデントされた出力を取得するには、次のようにします。
python -mjson.tool glossary.json
# prints
{
'glossary': {
'GlossDiv': {
'GlossList': {
'GlossEntry': {
'Abbrev': 'ISO 8879:1986',
'Acronym': 'SGML',
'GlossDef': {
'GlossSeeAlso': [
'GML',
'XML'
],
'para': 'A meta-markup language, used to create markup languages such as DocBook.'
},
'GlossSee': 'markup',
'GlossTerm': 'Standard Generalized Markup Language',
'ID': 'SGML',
'SortAs': 'SGML'
}
},
'title': 'S'
},
'title': 'example glossary'
}
}
そして、JSONオブジェクトをPythonにロードし、必要なものだけを抽出する方法は次のとおりです。
python -c 'import json; fp = open('glossary.json', 'r'); obj = json.load(fp); fp.close(); print(obj['glossary']['title']')
# prints
example glossary
データへのアクセス
JSONデータをpython変数にロードすると、他のpython dict(または場合によってはリスト)と同じようにデータにアクセスできます。たとえば、上記のJSONデータには次のようにアクセスできます。
firstName = obj['firstName']
lastName = obj['Hall']
age = obj['age']
データ型
データ型はデータから自動的に決定されます。ご了承ください 年 整数として解析されます。
print(type(obj['firstName']), type(obj['lastName']), type(obj['age']))
# prints
次の変換テーブルは、JSONからPythonへの変換に使用されます。
カスタムクラスを使用したJSONの解析
デフォルトでは、JSONオブジェクトは Pythonに解析されました dict 。 JSONデータから独自のクラスのオブジェクトを自動的に作成する必要がある場合があります。あなたは指定することによってそれを行うことができます object_hook 変換を処理する関数。次の例はその方法を示しています。
これは、を表すカスタムクラスです。 人 。
class Person:
def __init__(self, firstName, lastName, age):
self.firstName = firstName
self.lastName = lastName
self.age = age
def __str__(self):
return '{{'firstName' = '{0}','lastName' = '{1}', 'age' = {2}}}'.format(self.firstName, self.lastName, self.age)
このクラスのインスタンスは、必要な引数を次のように渡すことによって作成されます。
person = Person('Crystal', 'Newell', 27)
JSONを解析するときにこのクラスを使用してインスタンスを作成するには、 object_hook 次のように定義された関数:関数はPythonを受け取ります dict 正しいクラスのオブジェクトを返します。
def obj_creator(d):
return Person(d['firstName'], d['lastName'], d['age'])
これを使用できるようになりました object_hook JSONパーサーを呼び出すときに機能します。
with open('sample.json', 'r') as fp:
obj = json.load(fp, object_hook = obj_creator)
print(obj)
# prints
{'firstName' = 'Alice','lastName' = 'Hall', 'age' = 35}
JSONの使用例
JSONは最近非常に人気があります。多くのWebサイトおよびSaaS(Software As A Service)アプリケーションは、アプリケーションで直接使用できるJSON出力を提供します。公開されているものには次のものがあります。
- StackOverflow / StackExchange。 これがURLです これは、JSON形式で質問のリストを返します。
- GitHubはhttps://developer.github.com/v3/でJSONAPIを提供しています。
- そして、これがFlickr APIです:https://developer.yahoo.com/flickr/。
それをうまく利用する方法についてのより多くの例を探しているなら、このガイドをチェックしてください Pythonを使用してソーシャルメディアボットを構築する 。
WiiをHDMIでテレビに接続する方法
JSONを使用してサービスを利用または提供していますか?また、テクノロジースタックでPythonを使用していますか?以下のコメントで説明してください。
共有 共有 つぶやき Eメール Windows 11にアップグレードする価値はありますか?Windowsが再設計されました。しかし、それはWindows10からWindows11に移行するように説得するのに十分ですか?
次を読む 関連トピック- プログラミング
- プログラミング
- Python
ニュースレターを購読する
ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。
購読するにはここをクリックしてください