一気にいろいろ作ったので整理するのが大変なのですが、ABNF ParserとJSON Parser、JSONとJava Collectionなどの相互変換、程度まで組み上がっているのでメモしておくよ。
SoftLibABNF
https://github.com/okomeki/SoftLibABNF
https://github.com/okomeki/SoftLibRFC
https://siisise.net/abnf.html
ABNFが名前空間を含めて扱えるのと ParserというのかBuilderというのか、そういうのが作れますよというもので、ABNFでざっくり構文解析して、少しのJavaで組み立てればとても便利というもの。
RFCで使われているABNFはBNFの中でも簡単なので、覚えるのも使うのもすぐにできるかもしれません。
SoftLibRFCはサンプルかもしれません。
SoftLibJSON
https://github.com/okomeki/SoftLibJSON
https://siisise.net/java/json.html
RESTを使いたいなという過程でできた、SoftLibABNFで作ったJSON Parserに、JSON Patch, JSON Pointer, オブジェクトマッピングなどいろいろ足しているもの。オブジェクトマッピングから作り始めた気がするのでそっちが強いのかな。
Javaの型をそのまま生かしたいのでList,Mapの拡張っぽくはじめてみた。
とりあえずJava標準のJSON-PやJSON-B的な形式も実装してみたが、そっちはおまけ程度。
JSONはお気楽データ型なので、いろいろなものを変換できると楽、ということでListやMap、Classや配列とJSONをマッピングしたらいろいろ捗った。
net.siisise.json.JSON と net.siisise.json.bind.OMAP ぐらいに色々詰め込んであるかも。
JSONValue json = JSON.valueOf(Object なんでも); でJSONになる。
JSONArray は List としてJSONObject は Map として実装しているので、変換可能な型を入れてもやんわり変換しているつもり。
JSONValue json = JSON.parseWrap(String JSON構文); でオブジェクト化。WrapがないとJava型、List,Map寄りになるかもしれない。
String string = json.toJSON(); でJSON文字型に。改行、タブなし。
String string = json.toJSON(JSON.TAB); 改行タブありも指定できる。
Object val = OMAP.valueOf(json, 変換対象ClassかType); 型変換も楽?
Class, List<>, Map<>, 配列, String, プリミティブ型(int,long, ...) いろいろ
JsonValue jsonp = json.toJson(); 標準JSONPへの変換とか。Jakarta EE対応どうしよう。
おまけ程度にIoT向けのMessagePack (msgpack)というものからの変換もできるようにしてみたかも文字列にするかArrayにするかなど変換方法がいろいろありそうなので一方通行。
Jakarta EEと旧式と両方対応しようと思ったが、Java SE 9以降の形式になるのでJava SE 1.8とバイナリ的な互換性がなくなるのでバージョンわけないといけないかと悩み。