{"id":20877424,"url":"https://github.com/t1/jsonbap","last_synced_at":"2026-04-23T15:32:25.949Z","repository":{"id":259689788,"uuid":"879209242","full_name":"t1/jsonbap","owner":"t1","description":"An implementations of Jakarta JSON Binding (JSON-B) using an annotation processor at compile-time instead of reflection at runtime","archived":false,"fork":false,"pushed_at":"2026-04-22T03:08:39.000Z","size":265,"stargazers_count":0,"open_issues_count":11,"forks_count":0,"subscribers_count":1,"default_branch":"trunk","last_synced_at":"2026-04-22T05:17:19.709Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/t1.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-27T09:57:50.000Z","updated_at":"2026-01-29T07:28:03.000Z","dependencies_parsed_at":"2026-02-16T13:05:40.617Z","dependency_job_id":null,"html_url":"https://github.com/t1/jsonbap","commit_stats":null,"previous_names":["t1/jsonbap"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/t1/jsonbap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t1%2Fjsonbap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t1%2Fjsonbap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t1%2Fjsonbap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t1%2Fjsonbap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/t1","download_url":"https://codeload.github.com/t1/jsonbap/tar.gz/refs/heads/trunk","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/t1%2Fjsonbap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32186817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T15:28:30.493Z","status":"ssl_error","status_checked_at":"2026-04-23T15:28:29.972Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-18T06:56:59.000Z","updated_at":"2026-04-23T15:32:25.944Z","avatar_url":"https://github.com/t1.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"= A _fast_ implementation of Jakarta JSON Binding (JSON-B)\n\n[note]\n====\nThis project is in a very early stage and still far from ready for production use.\nCurrently, only 21% of the JSON-B TCK tests pass.\nThe `jsonb-tck` module is intentionally not a submodule of the parent POM, as most TCK tests still fail and would break the build.\nBuild it separately: `cd jsonb-tck \u0026\u0026 mvn test`.\n====\n\n`jsonbap` = JSON-B Annotation Processor\n\nAn implementations of https://jakarta.ee/specifications/jsonb/3.0/jakarta-jsonb-spec-3.0[Jakarta JSON Binding] (JSON-B) using an annotation processor at compile-time instead of reflection at runtime, making it much faster, esp. when comparing to the reference implementation of JSON-B, https://github.com/eclipse-ee4j/yasson[Yasson].\n\nNice side effect: If you should need to debug your JSON-B mappings, you can simply set a breakpoint in your IDE and inspect the generated, nicely readable and simple Java code.\n\n== Background\n\nhttps://jakarta.ee/specifications/jsonb/3.0/jakarta-jsonb-spec-3.0[JSON-B] is a standard API for converting Java objects to and from JSON documents.\nIt's part of the Jakarta EE platform and is used by many other libraries and frameworks.\nThe reference implementation of JSON-B is https://github.com/eclipse-ee4j/yasson[Yasson], which was never designed to be fast, not even being production ready was a real design goal. https://github.com/FasterXML/jackson[Jackson], for example, is much faster and was in use for years before JSON-B, but it's not a standard API.\nSadly, people conclude that JSON-B is slow and use Jackson instead.\n\nIn principle, this works very similar to https://github.com/ngs-doo/dsl-json[DSL-Json] or https://github.com/quarkusio/qson[QSON], but with focus and proper support for JSON-B (when it's finally done), and it works as an annotation processor.\n\n== Benchmark\n\nI tried to do some benchmarks, but the results are obviously completely wrong.\n\n// |===\n// |Benchmark |Score |Error\n//\n// |Jackson\n// |117.626\n// |±  1.286\n//\n// |Johnzon\n// |209.336\n// |±  9.924\n//\n// |JsonP\n// |1775.570\n// |± 18.056\n//\n// |Jsonbap\n// |146.648\n// |±  1.126\n//\n// |StringWriter\n// |142.689\n// |±  3.918\n//\n// |Yasson\n// |360.094\n// |± 26.499\n// |===\n\n== Limitations\n\nThis is an annotation processor generating source code.\nThis makes things fast, but brings things to look out for:\n\n* All classes that need to be (de)serialized have to be annotated as `@Bindable`, or (if it's not your own source) be listed in the `value` of some `@Bindable` annotation.\n* Some configurations in the JSON-B API assume to be evaluated at runtime.\nWhen generating the source code, this has not yet been specified, so we need different solutions:\n** `jsonb.property-naming-strategy`: you can set the `propertyNamingStrategy` in the `@Bindable` annotation.\n** `jsonb.property-visibility-strategy`: this is not yet supported, as it heavily relies on reflection; and we would need code everywhere just to allow for the potential.\nAlso, the `@JsonbVisibility` annotation relies on reflection, but at least, the annotation is an opt-in at compile time.\n\n== Lombok\n\nIf you use Lombok to generate getters, you must make sure that the Lombok runs before the `jsonbap`.\nTo do so, specify the processor classes, e.g. for Maven in the `maven-compiler-plugin`:\n\n[source,xml]\n----\n\u003cplugin\u003e\n    \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n    \u003cartifactId\u003emaven-compiler-plugin\u003c/artifactId\u003e\n    \u003cversion\u003e3.13.0\u003c/version\u003e\n    \u003cconfiguration\u003e\n        \u003cannotationProcessors\u003e\n            \u003cannotationProcessor\u003elombok.launch.AnnotationProcessorHider$AnnotationProcessor\n            \u003c/annotationProcessor\u003e\n            \u003cannotationProcessor\u003elombok.launch.AnnotationProcessorHider$ClaimingProcessor\n            \u003c/annotationProcessor\u003e\n            \u003cannotationProcessor\u003ecom.github.t1.jsonbap.impl.JsonbAnnotationProcessor\u003c/annotationProcessor\u003e\n        \u003c/annotationProcessors\u003e\n    \u003c/configuration\u003e\n\u003c/plugin\u003e\n----\n\n== Logging/Debugging\n\nJSONB-AP generates compiler notifications: e.g. errors, if you did something wrong, or warnings, if you did something suspicious.\nIt also generates notes for the most important things it does, e.g. which files it generates.\n\nIf you need to see more details, it's generally sufficient to look at the generated source files:\nAll the relevant information should be there.\nSome things as plain Java code that you can even debug.\nAnd some things as comments, e.g. the source of annotations it has picked up to generate the code.\n\nTo see what the `jsonbap` is doing in detail, you can add a *`compile`* scope dependency (normally you'd do this only `runtime` scoped) on an implementation of https://www.slf4j.org[slf4j] and set the log level to `DEBUG`.\nE.g. https://logback.qos.ch[logback] logs at debug by default.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ft1%2Fjsonbap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ft1%2Fjsonbap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ft1%2Fjsonbap/lists"}