16
19

More than 3 years have passed since last update.

Pythonでコメント付きのJSONファイル(JSONC)を読み込む

Last updated at Posted at 2021-03-19

はじめに

JSONの詳細はウィキペディアの記事をご参照ください。
このJSON形式ですが、本来の仕様にはコメントを記述するための仕様がありません。

読み込みも書き出しもソフトウェアで行う場合はコメントは要らないと思います。
一方で、設定ファイルにJSONを採用し、ユーザーがメモ帳等で変更するようなスタイルのソフトにおいては、設定値の仕様が分かり易いのが望ましいかつファイルは読み込みさえできればOKという場面が多く、コメントの需要が出てきます。

本記事では、全く大したコードではないですが たまに欲しくなる自分のために
「コメントが書かれたJSON」を読み込むためのPythonコードを載せておきます。

JSONCとは?

JSONにコメントを記述するための仕様が追加されたもの・・・という私の認識です。

こちらのQiita記事( JSON にもコメントを書きたい )で紹介があります。
もともとはVisual Studio CodeのJSON形式の設定ファイルにコメントを書くために生まれたものだそうです。

C言語のように///* */ の形式でコメントが書けます。
まさに欲しいのはこれですね。以下の感じです。

{
  /*
    コメント
  */
  "Sample":{
        "Param1": 0.019,   //浮動小数点
        "Param2": 0,       //整数
        "String": "str"    //文字列
  }
}

JSONを読み込む

まずは普通のJSONファイルを読み込むためのコードです。
Pythonではモジュールが提供されているので読むだけなら簡単です。

import json

with open("JsonFile.json", 'r', encoding='utf-8') as f:  # ファイルを開く
      text = f.read()                                    # 文字列を取得する
json_obj = json.loads(text)                              # JSONとして解釈 → 辞書形式で戻ってくる

簡単ですね。

JSONCを読み込む

C言語のようなコメントが書かれたJSONです。
従って、C言語のようなコメントを取り除けば普通に解釈できるので正規表現で消し去ってやります

マッチさせるための正規表現は下記Qiita記事を参照
C/C++のコメントにマッチする正規表現

全ての材料は揃いました。以下でOKです。

jsonc.py
import json, re

def ReadJSONC(filepath:str):
    with open(filepath, 'r', encoding='utf-8') as f:      # 開く
        text = f.read()                                   # 文字列を取得
    re_text = re.sub(r'/\*[\s\S]*?\*/|//.*', '', text)    # コメントを削除
    json_obj = json.loads(re_text)                        # JSONとして解釈
    return json_obj                                       # 辞書形式を返す

別のpythonファイルから呼び出して使うときは、上記ファイルを置いて、
from .jsonc import ReadJSONCとか書いて呼び出せば使えますね。

以上です。

16
19
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
16
19