##はじめに
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です。
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
とか書いて呼び出せば使えますね。
以上です。