k01ken’s b10g

He110 W0r1d!

PythonでJSONデータを読み込み、処理する

開発環境は、Windows 10 Pro(64bit) + Python 3.7.6。

PythonJSONをパースする場合、組み込みのパッケージであるjsonパッケージを使います。
使い方には、JSONファイル自体を読み込む場合と、JSON形式の文字列の場合の2パターンがあります。

JSONファイルを読み込む場合

試しに、以下のjsonファイルをprof.jsonという名前で保存します。

{
  "name": "Json Taro",
  "age": 10,
  "hobby": "Writing json"
}

次にJSONパースするためのPythonのプログラム(名前はparser.pyとします)を書きます。

import json

json_file = open("prof.json", "r")
print(json.load(json_file))

結果は、以下の通り。
f:id:k01ken:20210608223939p:plain

個別にデータを取り出す場合は、

import json

json_file = open("prof.json", "r")
loaded_json_file = json.load(json_file)

print(loaded_json_file["name"])
print(loaded_json_file["age"])
print(loaded_json_file["hobby"])

f:id:k01ken:20210608225929p:plain
という風にします。

JSON形式の文字列を処理する場合

import json

json_string = '{"name": "Json Hanako", "age":13, "hobby": "Writing json."}'
loaded_json_string = json.loads(json_string)

print(loaded_json_string["name"])
print(loaded_json_string["age"])
print(loaded_json_string["hobby"])

結果は以下のようになります。
f:id:k01ken:20210608230502p:plain

コマンドラインからJSON文字列を処理する場合

Pythonコマンドライン引数を取得する場合、受け取った文字列にスペースがある場合は、スペースの直前までしか、文字列として取得できません。その場合は、ダブルクォーテーションで囲う必要があります(シングルクォーテーションだと機能しない)。また、ダブルクォーテーションの中でダブルクォーテーションを使いたければ、\"としておかないといけません。コマンドライン引数で、JSON形式の文字列を渡す場合、以下のようになります。

python parser.py "{\"name\": \"Json Hanako\", \"age\":13, \"hobby\": \"Writing json.\"}"

受け取るPythonファイルは以下のようになります

import json
import sys

json_string = sys.argv[1]
loaded_json_string = json.loads(json_string)

print(loaded_json_string["name"])
print(loaded_json_string["age"])
print(loaded_json_string["hobby"])

結果は以下のようになります。
f:id:k01ken:20210608233413p:plain