PythonでフルスクラッチからJSONパーサーを書いた
TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > PythonでフルスクラッチからJSONパーサーを書いた
フルスクラッチでJSONパーサーを書いてみました
JSONはよくWebで使われるデータ形式ですが、そういえば自分でパースしたことないなって思ったのでしてみました。そんなに難しくなさそうだし。
リポジトリ
実装したものはこちらにおいてあります
https://github.com/youkidearitai/my-json-parser/
ライブコーディングの動画
切り抜きをニコニコ動画に上げました。
実装方法
https://www.json.org/json-ja.htmlを参考に実装してみました。言語はPythonを使いました。
Syntax diagramを見てみるとobjectから行くのがいいかなーと思いましたが、後々にvalueから始まることに気がついてvalueから読み込むことにしたりとか、Pythonのiterに悩んだりとか結構しんどかった。
stringのUnicode codepointのパースに悩んだりもしました。
感想
動画にしてみたら、バグに悩んでる時間がかなり占めてますね、デバッガでも動かしとくべきだったか。
実装してみて思ったのは、JSONは値(value)が1個のデータ形式なので、再帰が重要になってくるというところでしょうか。先読みとか必要かなとも思ったのですが案外そうでもなかった。単純に実装から広まったのかなあと思いましたね。
実際に使われるJSONパーサーは、字句解析と構文解析を通して実装されているかと思います。エラー処理などしなければいけないので。
JSONの実装を行うことで仕様にも目が行くようになりました。特に目を通しておくのはRFC7159とか、その更新版のRFC8259、Standard ECMA-404などがあります。 RFC7159は、RFC8259によって廃止になったものの、例えばPHPのjson_decodeではRFC7159のスーパーセットとなっているので、RFC7159は読み下しておいたほうが良いのだろうと思います。
もっと勉強していきたいものです。