2020年6月8日月曜日

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

0 件のコメント:

コメントを投稿

Oculus Quest 2をつついてみた

 Oculus Quest 2、日本で店頭販売されるということでヨドバシのポイントを活用して予約。昨日の昼頃届いたので軽く設定をして夜使ってみた。 まずfacebookのアカウントが必要なので、ない場合は若干苦労することになるのかもしれず、いろいろニュースにもなっているが略。 ア...