{"id":18012865,"url":"https://github.com/tonivade/purejson","last_synced_at":"2025-10-03T18:55:33.644Z","repository":{"id":46978255,"uuid":"305830682","full_name":"tonivade/purejson","owner":"tonivade","description":"Pure functional Json parser library","archived":false,"fork":false,"pushed_at":"2025-09-25T06:25:37.000Z","size":959,"stargazers_count":4,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-25T08:33:08.505Z","etag":null,"topics":["experimental","functional-programming","java","json"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tonivade.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2020-10-20T20:51:40.000Z","updated_at":"2025-09-25T06:25:35.000Z","dependencies_parsed_at":"2024-01-03T22:22:25.247Z","dependency_job_id":"ac2d0137-4738-4323-9443-f4a555acee8e","html_url":"https://github.com/tonivade/purejson","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/tonivade/purejson","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fpurejson","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fpurejson/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fpurejson/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fpurejson/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tonivade","download_url":"https://codeload.github.com/tonivade/purejson/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fpurejson/sbom","scorecard":{"id":541946,"data":{"date":"2025-08-11","repo":{"name":"github.com/tonivade/purejson","commit":"bb5913cef6c4eb85f3da272596bbd9433b481c1d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/8 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/gradle.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/tonivade/purejson/gradle.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/tonivade/purejson/gradle.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 22 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T08:24:20.737Z","repository_id":46978255,"created_at":"2025-08-20T08:24:20.737Z","updated_at":"2025-08-20T08:24:20.737Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277161851,"owners_count":25771535,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-26T02:00:09.010Z","response_time":78,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["experimental","functional-programming","java","json"],"created_at":"2024-10-30T03:19:20.723Z","updated_at":"2025-10-03T18:55:33.639Z","avatar_url":"https://github.com/tonivade.png","language":"Java","readme":"# purejson\n\nPure Functional Json Parser Library.\n\nBuilt on top of [minimal-json](https://github.com/tonivade/minimal-json) parser, it defines an encoder/decoder machinery.\n\nIt supports java records and the minimum required java version is Java 21.\n\n## Usage\n\nIf you are familiar with Gson, it will be pretty straightforward for you to use this\nlibrary.\n\n```java\n  record User(int id, String name) {}\n\n  var json = \"\"\"\n    { \n      \"id\": 1, \n      \"name\": \"toni\" \n    }\"\"\";\n\n  var user = new PureJson\u003cUser\u003e().fromJson(json);\n\n  assertEquals(new User(1, \"toni\"), user);\n```\n\nPureJson supports runtime reflection and annotation processors. If an adapter exists for a \nspecific type, then the adapter is used instead of reflection.\n\n## Features\n\n### Runtime Reflection\n\n- Java POJOs: with empty constructor and setter/getters. Fields are populated using reflection.\n- Java Value Objects: without empty constructor and setters (immutables). Constructor with parameters is used to create new instances.\n- Java Records (Java 17+): canonical constructor is used to create new instances.\n\n### Annotation Processor\n\nYou can annotate your classes with `@Json` and an adapter for this class will be generated.\n\n- Java Value Objects\n- Java Records (Java 17+)\n\n## Performance\n\nTested on my laptop: \n- cpu: Intel Core i7-1065G7 @ 8x 3.9GHz\n- ram: 32GB\n- cores: 4\n\n```\nPerformance parse pojo\nname  tot\t        min     max       mean    p50     p90     p95     p99      rps\nrefl\t34134667821 5095046 106700365 6826933 6146382 6881559 7863734 22812745 146\nbuil\t19284790789 2843116 103816200 3856958 3202927 3878235 4522538 7356144  259\nanno\t17259201156 2415316 103940391 3451840 2832043 3433976 4024925 6574702  289\ngson\t12650463617 1835867\t97242144  2530092 2117968 2442139 2776042 4853924  395\n```\n\n```\nPerformance parse record\nname  tot\t        min     max       mean    p50     p90     p95     p99     rps\nrefl  18285321842 2258864 165923995 3657064 2612503 5474232 6144933 7096856 273\nbuil  17492340483 2320340 212767711 3498468 2632877 3831916 5741407 6684536 285\nanno  20553653778 2301261 166565596 4110730 3158407 5984022 6830097 7909004 243\ngson  17844532945 2288693 165625520 3568906 2615751 4772828 5758663 6632191 280\n```\n\n```\nPerformance serialize pojo\nname  tot\t        min     max       mean    p50     p90     p95     p99     rps\nrefl  7037073920  3474481 152323255 5407414 4104274 7370875 8258107 9935941 184\nbuil  27831064153 3298775 153296005 5566212 4214510 7764021 8566194 9995677 179\nanno  26499119687 3476054 155194968 5299823 3965655 7423811 8174893 9489636 188\ngson  13068220588 1744770 136853263 2613644 1959073 3741622 3986688 4298267 382\n```\n\n```\nPerformance serialize record\nname  tot\t        min     max       mean    p50     p90     p95     p99     rps\nrefl  24695419584 3078750 133890565 4939083 4011554 4748900 5340099 8269929 202\nbuil  23484748117 3310479 134497319 4696949 3805725 4493878 5001936 7749564 212\nanno  23461111391 3293238 133091474 4692222 3754019 4592889 5120672 7544880 213\ngson  11629669510 1603659 130652273 2325933 1842801 2102938 2377305 3753296 429\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonivade%2Fpurejson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftonivade%2Fpurejson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonivade%2Fpurejson/lists"}