Python JSON: エンコード(ダンプ)、デコード(ロード)、JSON ファイルの読み取り
JSONとは何か Python?
JSONの in Python は、 Javaネットワーク上でテキスト形式でデータ交換やデータ転送を行うためのスクリプト。一般的にJSONは文字列またはテキスト形式です。APIやデータベースで使用でき、オブジェクトを名前と値のペアで表します。JSONは Javaスクリプト オブジェクト表記。
Python JSON 構文:
JSON はキーと値のペアとして記述されます。
{
"Key": "Value",
"Key": "Value",
}
JSONは Python 辞書。 Python JSON をサポートしており、JSON としてライブラリが組み込まれています。
JSONライブラリ Python
'マーシャル'と'ピクルス」 外部モジュールの Python バージョンを維持する JSONの Python ライブラリ。JSONの操作 Python エンコードやデコードなどのJSON関連の操作を実行するには、まず import JSON ライブラリとそのための .py ファイル、
import json
JSONでは以下のメソッドが利用可能です Python モジュール
| 方法 | 詳細説明 |
|---|---|
| dumps() | JSON オブジェクトへのエンコード |
| 投げ捨てる() | エンコードされた文字列をファイルに書き込む |
| ロード() | JSON文字列をデコードする |
| 負荷() | JSONファイルを読み込みながらデコードする |
Python JSON(エンコード)
JSONの 図書館 Python 次の翻訳を実行します Python オブジェクトをデフォルトでJSONオブジェクトに変換する
| Python | JSONの |
|---|---|
| 辞書 | オブジェクト |
| リスト | 配列 |
| ユニコード | String |
| 数値 – int、long | 数値 – 整数 |
| フロート | 数値 - 実数 |
| ◯ | ◯ |
| × | × |
| なし | ヌル |
加工 Python データをJSONに変換する操作はエンコード操作と呼ばれます。エンコードはJSONライブラリメソッドの助けを借りて行われます。 dumps()
JSON dumps() の Python
json.dumps() in Python 辞書オブジェクトを変換するメソッドです Python JSON 文字列データ形式に変換します。解析、印刷などの操作のためにオブジェクトを文字列形式にする必要がある場合に便利です。
では、最初のjson.dumpsエンコードの例を実行してみましょう。 Python:
import json
x = {
"name": "Ken",
"age": 45,
"married": True,
"children": ("Alice","Bob"),
"pets": ['Dog'],
"cars": [
{"model": "Audi A1", "mpg": 15.1},
{"model": "Zeep Compass", "mpg": 18.1}
]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
出力:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
例を見てみましょう Python 同じ関数を使用して辞書のJSONファイルを作成するためにJSONをファイルに書き込む 投げ捨てる()
# here we create new data_file.json file with write mode using file i/o operation
with open('json_file.json', "w") as file_write:
# write json data into file
json.dump(person_data, file_write)
出力:
表示するものはありません…システム内にjson_file.jsonが作成されます。以下に示すように、そのファイルを確認できます。JSONをファイルに書き込みます Python 例。
JSONから Python (解読)
JSON 文字列のデコードは組み込みメソッドの助けを借りて行われます json.loads() & json.load() JSONライブラリの Python. ここでの翻訳表はJSONオブジェクトの例を示しています Python オブジェクト デコードを実行するのに役立ちます Python JSON 文字列。
| JSONの | Python |
|---|---|
| オブジェクト | 辞書 |
| 配列 | リスト |
| String | ユニコード |
| 数値 – 整数 | 数値 – int、long |
| 数値 - 実数 | フロート |
| ◯ | ◯ |
| × | × |
| ヌル | なし |
基本的なJSONの解析を見てみましょう Python の助けを借りてデコードする例 json.loads 機能、
import json # json library imported
# json data string
person_data = '{ "person": { "name": "Kenn", "sex": "male", "age": 28}}'
# Decoding or converting JSON format in dictionary using loads()
dict_obj = json.loads(person_data)
print(dict_obj)
# check type of dict_obj
print("Type of dict_obj", type(dict_obj))
# get human object details
print("Person......", dict_obj.get('person'))
出力:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}
JSONファイルのデコードまたはJSONファイルの解析 Python
さて、JSONファイルを読む方法を学びましょう Python Python JSON の解析例:
注: JSON ファイルのデコードは、ファイル入力/出力 (I/O) 関連の操作です。JSON ファイルは、プログラムで指定した場所にシステム上に存在している必要があります。
Python JSONファイルを読み取る例:
import json
#File I/O Open function for read data from JSON File
with open('X:/json_file.json') as file_object:
# store file data in object
data = json.load(file_object)
print(data)
ここのデータ 辞書オブジェクトである Python 上記のJSONファイルに示されているように Python 例。
出力:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
コンパクトエンコーディング Python
JSONファイルのサイズを小さくする必要がある場合は、 Python.
例、
import json
# Create a List that contains dictionary
lst = ['a', 'b', 'c',{'4': 5, '6': 7}]
# separator used for compact representation of JSON.
# Use of ',' to identify list items
# Use of ':' to identify key and value in dictionary
compact_obj = json.dumps(lst, separators=(',', ':'))
print(compact_obj)
出力:
'["a", "b", "c", {"4": 5, "6": 7}]'
** Here output of JSON is represented in a single line which is the most compact representation by removing the space character from compact_obj **
JSON コードの形式 (きれいに印刷)
- 目的は、人間が理解できるように適切にフォーマットされたコードを書くことです。 きれいな印刷の助けを借りて、誰でも簡単にコードを理解できます。
例:
import json
dic = { 'a': 4, 'b': 5 }
''' To format the code use of indent and 4 shows number of space and use of separator is not necessary but standard way to write code of particular function. '''
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': '))
print(formatted_obj)
出力:
{
"a" : 4,
"b" : 5
}
これをよりよく理解するには、インデントを 40 に変更し、出力を観察してください。
JSON コードの順序付け:
ソートキー の属性 Python dumps関数の引数はJSONのキーを昇順でソートします。sort_keys引数はブール属性です。これがtrueのときはソートが許可され、そうでない場合は許可されません。 Python 文字列を JSON にソートする例。
例、
import json
x = {
"name": "Ken",
"age": 45,
"married": True,
"children": ("Alice", "Bob"),
"pets": [ 'Dog' ],
"cars": [
{"model": "Audi A1", "mpg": 15.1},
{"model": "Zeep Compass", "mpg": 18.1}
],
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
出力:
{
"age": 45,
"cars": [ {
"model": "Audi A1",
"mpg": 15.1
},
{
"model": "Zeep Compass",
"mpg": 18.1
}
],
"children": [ "Alice",
"Bob"
],
"married": true,
"name": "Ken",
"pets": [
"Dog"
]
}
ご覧のとおり、キーの年齢、車、子供などが昇順に配置されています。
複雑なオブジェクトのエンコーディング Python
複合オブジェクトには2つの異なる部分があり、
- 実部
- 虚数部
例: 3 +2i
複雑なオブジェクトのエンコードを実行する前に、変数が複雑かどうかを確認する必要があります。インスタンス メソッドを使用して、変数に格納されている値を確認する関数を作成する必要があります。
オブジェクトが複雑であるか、エンコードに適しているかをチェックするための特定の関数を作成しましょう。
import json
# create function to check instance is complex or not
def complex_encode(object):
# check using isinstance method
if isinstance(object, complex):
return [object.real, object.imag]
# raised error using exception handling if object is not complex
raise TypeError(repr(object) + " is not JSON serialized")
# perform json encoding by passing parameter
complex_obj = json.dumps(4 + 5j, default=complex_encode)
print(complex_obj)
出力:
'[4.0, 5.0]'
複雑なJSONオブジェクトのデコード Python
JSON内の複雑なオブジェクトをデコードするには、JSON文字列に複雑なオブジェクトが含まれているかどうかをチェックするobject_hookパラメータを使用します。文字列からJSONへの変換を理解しましょう。 Python 例、
import json
# function check JSON string contains complex object
def is_complex(objct):
if '__complex__' in objct:
return complex(objct['real'], objct['img'])
return objct
# use of json loads method with object_hook for check object complex or not
complex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)
#here we not passed complex object so it's convert into dictionary
simple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)
print("Complex_object......",complex_object)
print("Without_complex_object......",simple_object)
出力:
Complex_object...... (4+5j)
Without_complex_object...... {'real': 6, 'img': 7}
JSON シリアル化クラス JSONEncoder の概要
JSONEncoderクラスは、あらゆるデータのシリアル化に使用されます。 Python オブジェクトをエンコードする際に使用します。エンコードには3つの異なる方法があり、
- デフォルト(o) – サブクラスに実装され、シリアライズオブジェクトを返します。 o オブジェクト。
- エンコード(o) – JSONダンプと同じ Python メソッドはJSON文字列を返します Python データ構造。
- イテレンコード(o) – 文字列を XNUMX つずつ表現し、オブジェクト o をエンコードします。
JSONEncoderクラスのencode()メソッドの助けを借りて、任意の Python 下図のようなオブジェクト Python JSON エンコーダーの例。
# import JSONEncoder class from json
from json.encoder import JSONEncoder
colour_dict = { "colour": ["red", "yellow", "green" ]}
# directly called encode method of JSON
JSONEncoder().encode(colour_dict)
出力:
'{"colour": ["red", "yellow", "green"]}'
JSON デシリアライズ クラス JSONDecoder の概要
JSONDecoderクラスは、任意の Python オブジェクトをデコードしながら実行します。デコードには3つの異なる方法があり、
- デフォルト(o) – サブクラスに実装され、逆シリアル化されたオブジェクトが返されます o オブジェクト。
- デコード(o) – json.loads() メソッドの戻り値と同じ Python JSON 文字列またはデータのデータ構造。
- raw_decode(o) - 代表する Python 辞書を1つずつ読み込んでオブジェクト o をデコードします。
JSONDecoderクラスのdecode()メソッドの助けを借りて、以下に示すようにJSON文字列をデコードすることもできます。 Python JSON デコーダーの例。
import json
# import JSONDecoder class from json
from json.decoder import JSONDecoder
colour_string = '{ "colour": ["red", "yellow"]}'
# directly called decode method of JSON
JSONDecoder().decode(colour_string)
出力:
{'colour': ['red', 'yellow']}
URL からの JSON データのデコード: 実際の例
指定されたURL(https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) を辞書形式に変換します。
Python ファイルからJSONを読み込む例:
注意:- リクエストライブラリがすでにインストールされていることを確認してください Pythonそうでない場合は、ターミナルまたはCMDを開いて次のように入力します。
- (ために Python 3以上) pip3 インストールリクエスト
import json
import requests
# get JSON string data from CityBike NYC using web requests library
json_response= requests.get("https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json")
# check type of json_response object
print(type(json_response.text))
# load data in loads() function of json library
bike_dict = json.loads(json_response.text)
#check type of news_dict
print(type(bike_dict))
# now get stationBeanList key data from dict
print(bike_dict['stationBeanList'][0])
出力:
<class 'str'>
<class 'dict'>
{
'id': 487,
'stationName': 'E 20 St & FDR Drive',
'availableDocks': 24,
'totalDocks': 34,
'latitude': 40.73314259,
'longitude': -73.97573881,
'statusValue': 'In Service',
'statusKey': 1,
'availableBikes': 9,
'stAddress1': 'E 20 St & FDR Drive',
'stAddress2': '',
'city': '',
'postalCode': '',
'location': '',
'altitude': '',
'testStation': False,
'lastCommunicationTime': '2018-12-11 10:59:09 PM', 'landMark': ''
}
JSONライブラリに関連する例外 Python:
- CLASS json.JSONDecoderエラー デコード操作に関連する例外を処理します。これは、 値エラー。
- 例外 - json.JSONDecoderError(msg, doc)
- 例外のパラメータは、
- msg – フォーマットされていないエラーメッセージ
- doc – 解析された JSON ドキュメント
- pos – 失敗した場合にドキュメントのインデックスを開始します
- lineno – 行番号は pos に対応します
- コロン – 位置番号に対応する列番号
Python ファイルからJSONを読み込む例:
import json
#File I/O Open function for read data from JSON File
data = {} #Define Empty Dictionary Object
try:
with open('json_file_name.json') as file_object:
data = json.load(file_object)
except ValueError:
print("Bad JSON file format, Change JSON File")
無限とNaN Numbers in Python
JSONデータ交換フォーマット(RFC – Request For Comments)では無限値やNan値は許可されていませんが、 Python- 無限値および Nan 値関連の操作を実行するための JSON ライブラリ。JSON が INFINITE および Nan データ型を取得すると、リテラルに変換されます。
例、
import json
# pass float Infinite value
infinite_json = json.dumps(float('inf'))
# check infinite json type
print(infinite_json)
print(type(infinite_json))
json_nan = json.dumps(float('nan'))
print(json_nan)
# pass json_string as Infinity
infinite = json.loads('Infinity')
print(infinite)
# check type of Infinity
print(type(infinite))
出力:
Infinity <class 'str'> NaN inf <class 'float'>
JSON文字列で繰り返されるキー
RFC では、キー名は JSON オブジェクト内で一意である必要があると指定されていますが、必須ではありません。 Python JSON ライブラリは、JSON 内の繰り返しオブジェクトに対して例外を発生させません。繰り返しのキーと値のペアはすべて無視され、最後のキーと値のペアのみが考慮されます。
- 例、
import json
repeat_pair = '{"a": 1, "a": 2, "a": 3}'
json.loads(repeat_pair)
出力:
{'a': 3}
CLI(コマンドラインインターフェース)とJSON Python
json.tool JSON の pretty-print 構文を検証するためのコマンド ライン インターフェイスを提供します。 CLIの例を見てみましょう
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
出力:
{
"name": " Kings Authur "
}
JSONの利点 Python
- コンテナと値(JSONから Python および Python JSONへ)
- 人間が読める(プリティプリント)JSON オブジェクト
- データ処理で広く使用されています。
- 単一のファイル内で同じデータ構造はありません。
JSONの実装の制限 Python
- JSON 範囲のデシリアライザーと数値の予測
- JSON 文字列と JSON 配列の最大長、およびオブジェクトのネスト レベル。
Python JSON チートシート
| Python JSON関数 | 詳細説明 |
|---|---|
| json.dumps(person_data) | JSONオブジェクトの作成 |
| json.dump(person_data, file_write) | ファイルI/Oを使用してJSONファイルを作成する Python |
| Compact_obj = json.dumps(データ、区切り文字=(',',':')) | 区切り文字を使用して JSON オブジェクトからスペース文字を削除し、JSON オブジェクトを圧縮します |
| formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | インデントを使用した JSON コードの書式設定 |
| sorted_string = json.dumps(x, indent=4, sort_keys=True) | JSON オブジェクトキーをアルファベット順に並べ替える |
| complex_obj = json.dumps(4 + 5j、デフォルト = complex_encode) | Python JSON での複雑なオブジェクトのエンコード |
| JSONEncoder().encode(colour_dict) | シリアル化のための JSONEncoder クラスの使用 |
| json.loads(データ文字列) | JSON文字列のデコード Python json.loads() 関数を使用した辞書 |
| json.loads('{“__complex__”: true, “real”: 4, “img”: 5}', object_hook = is_complex) | 複雑なJSONオブジェクトのデコード Python |
| JSONDecoder().decode(colour_string) | JSONデコードの使用 Python デシリアライゼーション付き |








