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()
 
 値JsonValueJSONValue
     
 NULLJsonValue.NULL
JSONNULL 
 trueJsonValue.TRUE
JSONBoolean
 
 falseJsonValue.FALSEJSONBoolean 
 数値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

コメント

このブログの人気の投稿

ハリーポッター電子書籍版を購入してみた

面倒くさそなもじら系分離

電源回路が変?