2014年10月5日日曜日

pythonでjsonを読み込む際に、jsonにコメントがあるとエラーが出てしまう問題的なお話

  • このエントリーをはてなブックマークに追加

sublime text用のとあるプラグインを作ろうと思って、ここ最近はpythonでつるつるとやっている。
設定とかそういったものは全て.jsonで格納しておくとpythonでも楽なのは当然だったりするので、
さぁいざと思ってjson作って色々とやってやろうと思ったらなぜかエラー発生。

ValueError: Expecting property name enclosed in double quotes:

こんな風なエラーが出て来たんだけど何が原因なのか調べてみたところ判明。
ということで今回はそのお話をば。

■ValueError: Expecting property name enclosed in double quotes:とは

このエラーはなんていうかjsonの書式になっていないというか、
うまくjsonとして処理出来なかったよ的なエラーらしい。
別にカンマが抜けてるとか、コロンが抜けてるとかそういったわけでもないのにエラーが出てしまったのは、
コメントを記述していたのが原因だった。

ちなみに一般的というかレガシーなpythonでのjsonの読み込み方

#example.py
import json

f = open("example-file.json","r")
jsonData = json.load(f)
f.close()

print(jsonData)

#example-file.json
{
  #this is a comment
  "hoge":"foo",
  "test":"aiueo"
}
コメントがあるとうまく処理できないんだろうなぁって感じだけど、
settingファイルを作るというか参考にしてもらう際に、
コメントがなくてキーとバリューしかないとか普通にわからないから使わないだろうってことになりかねないけど、
ちょっとわからないのでお手上げ気味だったりするみたいな。

どうにかしたいんだけどどうにか出来ないこの現状という感じなので、
tryでも使ってコメントアウトしてるんじゃないか的なエラーを出してあげるしかないのかなと思ってみたり。

もしくは1行ずつ呼び出して文字列を作成し、コメントアウトされてたらその行は無視するみたいな方法でいくしかないのかと。
とりあえず普通に考えてjsonファイル内にコメントアウトはダメだよなとも思いつつ、
sublimeのpluginでのsettingファイルは大体コメントアウト記述されてるのにちゃんと読み込めてるのになぁって感じ。
方法が思いつかないので誰か教えてください的なみたいな。

Adsense