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 例。

Python JSONエンコードの例

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'}

Python JSON デコードの例

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}}

JSONファイルの解析 Python

コンパクトエンコーディング 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
}

JSON コードの形式 例

これをよりよく理解するには、インデントを 40 に変更し、出力を観察してください。

JSON コードの形式 例

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つの異なる部分があり、

  1. 実部
  2. 虚数部

複雑なオブジェクトのエンコーディング Python

例: 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")

JSONライブラリ Python

無限と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の例を見てみましょう

JSON を使用したコマンド ライン インターフェイス

$ 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 デシリアライゼーション付き