3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JSONデータの構成をツリー構造で出力する

Posted at

はじめに

タイトルの通りです。
ネスト構造が深すぎるデータ仕様をドキュメントにまとめないといけないということで、ツールとして作成したpythonのプログラムの改修版です。

動作確認環境

  • Windows10
  • python3.9.4
c:\>python --version
Python 3.9.4

※まぁ、python3系であれば動くかと、、

コード

json_2_tree_structre.py
from sys import argv
import json

# 構造が変わったときのインデントスペース数定義
HIERARCHICAL_INDENT = 2
# 型名変換定数定義
REPLACE_KEYS = {"dict": "object", "list": "array"}

# キー名変換(変換)
def replace_key(key_name):
    if key_name in REPLACE_KEYS:
        # 定義にある場合はそのままのキー名を返す
        return REPLACE_KEYS[key_name]
    else:
        # 定義にない場合はそのままのキー名を返す
        return key_name


# データを構造構成で出力
def json_2_tree_structre(data, indent=0):
    # インデント設定
    space = " " * (indent)
    # KeyValueの場合
    if type(data) == dict:
        for key in data.keys():
            # キー名出力
            print(space, key, sep="", end="")
            # 型名出力
            print(
                "\t", "(%s)" % replace_key(type(data[key]).__name__), sep="", end="\n"
            )
            # 再帰処理
            json_2_tree_structre(data[key], indent + HIERARCHICAL_INDENT)
    # 配列の場合
    elif type(data) == list and len(data) > 0:
        # 再帰処理
        json_2_tree_structre(data[0], indent)
    return


def main():
    # 引数チェック
    if len(argv) > 1:
        # ファイル読み込み
        fd = open(argv[1], mode="r")
        data = json.load(fd)
        fd.close()
        # 変換関数実行
        json_2_tree_structre(data)
    else:
        print("args shortage")


if __name__ == "__main__":
    main()

実行方法

以下のようなJSONファイルがpythonファイルと同じフォルダ内にあるとして、

sample1.json
{
  "id": 1,
  "type": "sample",
  "data": {
    "pointsA": [99, 83, 71, 59, 91],
    "pointsB": [78, 69, 98, 87, 74],
    "evaluation": "B",
    "test": {
      "temp1": "test1",
      "temp2": "test2",
      "temp3": "test3",
      "temp4": "test4"
    }
  }
}

コマンドプロンプトやpowershell等で

python json_2_tree_structre.py sample1.json

を実行

こんな感じ

id      (int)
type    (str)
data    (object)
  pointsA       (array)
  pointsB       (array)
  evaluation    (str)
  test  (object)
    temp1       (str)
    temp2       (str)
    temp3       (str)
    temp4       (str)

最後に

型とかタブとかそのあたりの出力はお好みで、、

参考

こちらの方のプログラムをベースで作らせてもらっています。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?