LoginSignup
3
1

More than 3 years have passed since last update.

【Python】json.dumpしたものをjson.loadするとなぜかstring型になる

Last updated at Posted at 2019-07-26

何が起きたか

物体検出の教師データとして、自前のデータをCOCO形式のアノテーションに変換するプログラムを組んでおりました。
COCOのアノテーションはJSON書くので、自前のプログラムにこんなコードを書きました。

json.py
json.dump(json.dumps(out_dic), f)

COCO形式と同じ構造でアノテーションを変換したものを、辞書out_dicで保持しておりました。それをjson.dumps()でJSON形式に変換した上で、json.dump()でJSONファイルに保存するコードを作成しました。

こうして作成したコードを、pycocotoolsで読み込もうとしたところエラー発生。

AssertionError: annotation file format <class 'str'> not supported

↑こんな感じで、json.loads()で読み込んでいるはずなのにString型で読み込まれているというエラーが発生。

解決

json.dump()にはjsonではなくdictをそのまま投げれば良い。

json.py
json.dump(out_dic, f)

ハマりポイント

  • json.dumps()で変換したJSON形式のStringをjson.dump()に投げても、エラーが出ない
  • 生成したJSONファイルを直接見ても、見た目的には問題なく変換できている
  • json.loads()で読み込む時にもエラーが出ない。

後から考えれば簡単なことですが、少しハマったのでシェアします。

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