Java API for JSON Processing,JSONBと比較してみた
ABNFパーサを作ったおまけでてきとーにRFCだけ見てなんとなく作ったJSON実装(SoftLibJSON)がどれくらいJava標準(Java API for JSON Processing と JSONB)に近いのかなと思い、比較してみた。
結果、一応元のRFCがあるのでほぼそっくりではあるのだけど、微妙に違うのでそのあたりの解説と、今後どうするのかとか。
Java API for JSON Processing | SoftLibJSON | ||
TEXTぱーす | どこか | JSON.parse() | |
JSON TEXT化 | JSONValue.toString() | ||
Object→JSON | JSONValue.valueOf() | ||
JSON→Object | JSONValue.map() | ||
値 | JsonValue | JSONValue | |
NULL | JsonValue.NULL | JSONNULL | |
true | JsonValue.TRUE | JSONBoolean | |
false | JsonValue.FALSE | JSONBoolean | |
数値 | JsonNumber | JSONNumber | |
配列 | JsonArray | JSONArray | |
構造体 | JsonObject | JSONObject |
こうしてみると、JsonValue からの継承関係はだいたいおなじ。JsonArrayはList,JsonObjectはMapを継承するのに対して、SoftLibJSONではJSON Pointerに対応するための機能も埋め込んだため、JSONArrayとJSONObjectではJSONCollectionとしてまとめたものを継承しているのが違い。
値の取り出し方はJava APIの方が型変換の呪縛でいろいろごっちゃりしているのに対し、SoftLibJSONではvalue()やmap() で取り出すのみでお手軽。
JSONへの変換、JSONからのパースは、Java APIでは別になっているが、SoftLibJSONではいろいろと融合している。JSONValue.valueOf() でなんでも済まそうとしている。
具体的に変換できそうなものは
- List,配列 と JSONArrayの相互変換
- class,Map と JSONObjectの相互変換
というものをReflectionを駆使して実装した結果、JSONB的なことは、ざっくり実装してしまっているが、オブジェクトの生成はコンストラクタの方に追従してみた方がいいのか? と思いJSONArrayからコンストラクタの変換にも挑戦中。
今後どういう変換機能をつけていけばいいだろか。
https://github.com/okomeki/SoftLibJSON
https://github.com/okomeki/SoftLibABNF
コメント
コメントを投稿