てきとうなさいと べぇたばん

PythonでフルスクラッチからJSONパーサーを書いた

JSONパーサーを自作する動画の、その11のサムネイル

フルスクラッチで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は読み下しておいたほうが良いのだろうと思います。

もっと勉強していきたいものです。