{"id":16960823,"url":"https://github.com/yoyosource/yapion","last_synced_at":"2026-03-06T01:01:34.684Z","repository":{"id":37805854,"uuid":"285376302","full_name":"yoyosource/YAPION","owner":"yoyosource","description":"A Serialization and Deserialization Library","archived":false,"fork":false,"pushed_at":"2022-12-16T22:38:26.000Z","size":15353,"stargazers_count":10,"open_issues_count":3,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-11T22:11:34.554Z","etag":null,"topics":["deserialization","hackathon","hacktoberfest","humanreadable","java","java-library","json","object-notation","serde","serialization","utils","yapion"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yoyosource.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null}},"created_at":"2020-08-05T18:45:55.000Z","updated_at":"2022-12-12T09:15:31.000Z","dependencies_parsed_at":"2023-01-29T16:16:11.227Z","dependency_job_id":null,"html_url":"https://github.com/yoyosource/YAPION","commit_stats":null,"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/yoyosource/YAPION","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoyosource%2FYAPION","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoyosource%2FYAPION/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoyosource%2FYAPION/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoyosource%2FYAPION/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yoyosource","download_url":"https://codeload.github.com/yoyosource/YAPION/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoyosource%2FYAPION/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30156843,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T22:39:40.138Z","status":"ssl_error","status_checked_at":"2026-03-05T22:39:24.771Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["deserialization","hackathon","hacktoberfest","humanreadable","java","java-library","json","object-notation","serde","serialization","utils","yapion"],"created_at":"2024-10-13T22:50:16.856Z","updated_at":"2026-03-06T01:01:34.320Z","avatar_url":"https://github.com/yoyosource.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![YAPION Version V0.25.3](https://img.shields.io/badge/YAPION%20Version-0.25.3-red)](https://github.com/yoyosource/YAPION/tree/master/)\n[![Java Version V1.8.0](https://img.shields.io/badge/Java%20Version-1.8.0-blue.svg)](https://github.com/yoyosource/YAPION/tree/master/)\n[![License: Apache 2.0](https://img.shields.io/badge/license-Apache%202-blue)](http://www.apache.org/licenses/LICENSE-2.0)\n[![CodeFactor](https://www.codefactor.io/repository/github/yoyosource/yapion/badge)](https://www.codefactor.io/repository/github/yoyosource/yapion)\n[![DeepSource](https://deepsource.io/gh/yoyosource/YAPION.svg/?label=active+issues\u0026token=8XHG1y8N-mhEr1VoGJVAtxv2)](https://deepsource.io/gh/yoyosource/YAPION/?ref=repository-badge)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9ec27a77e6724060b4f7c676552955f3)](https://www.codacy.com/gh/yoyosource/YAPION/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=yoyosource/YAPION\u0026amp;utm_campaign=Badge_Grade)\n[![Java CI with Gradle](https://github.com/yoyosource/YAPION/actions/workflows/gradle.yml/badge.svg)](https://github.com/yoyosource/YAPION/actions/workflows/gradle.yml)\n[![Nightly Branch/Release](https://github.com/yoyosource/YAPION/actions/workflows/nightly.yml/badge.svg)](https://github.com/yoyosource/YAPION/actions/workflows/nightly.yml)\n\n# YAPION\n**YAPION** is a slim and fast Object Notation specifically for Java Objects.\nIt can handle recursive Object structures and state specific serialization and deserialization (SsS/D).\nThis SsS/D is achieved by a self build annotation system used by YAPION. This object notation is designed for easy usage with complex Object structures and can do even more complex stuff fairly easy.\nAn extensive documentation can be found [here](https://yoyosource.github.io/YAPION/).   \n\n## YAPION's naming\n```\nY   -\u003e @yoyosource   \nAPI -\u003e application programming interface\nON  -\u003e object notation\n```\n\n## License\nYAPION is licensed under the terms of the Apache License 2.0. See the file LICENSE or visit http://www.apache.org/licenses/LICENSE-2.0 for details.\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n\n## Using in other Projects\nYAPION is not published on jcenter or mavenCentral. It is published directly to this GitHub repository. You can declare it as a dependency in your build.gradle with:\n```groovy\nrepositories {\n    maven {\n        url = uri(\"https://raw.githubusercontent.com/yoyosource/YAPION/master/releases\")\n    }\n}\n\ndependencies {\n    implementation 'yoyosource:YAPION:0.25.3'\n}\n```\n\n### Annotation Processing\nUsing the YAPION annotation processor is as easy as just writing two new dependency lines:\n```groovy\ndependencies {\n    implementation 'yoyosource:YAPION:0.25.3'\n    annotationProcessor 'yoyosource:YAPION:0.25.3'\n    testAnnotationProcessor 'yoyosource:YAPION:0.25.3'\n}\n```\nThis will enable both `@YAPIONAccessGenerator` and `@YAPIONSerializing` to be processed. But the later needs some more steps to create the desired output.\nFor that you need a post classes step to modify the class file directly and produce the desired output. For this you need to run the following command:\n```\njava -cp \u003cFolder to YAPION jar\u003e/YAPION-\u003cVERSION\u003e.jar yapion.serializing.annotationproccessing.SerializingApplier \u003coutput classes directory\u003e\n```\n\nYou will need to replace everything surrounded by '\u003c\u003e' with the values you need. One implementation in a gradle build script could look something like this:\n```groovy\ntask applySerializingProcessing {\n    description 'Finalize YAPIONAnnotationProcessing'\n    group \"build\"\n\n    doLast {\n        shell(\"java -cp \u003cFolder to YAPION jar\u003e/YAPION-\u003cVERSION\u003e.jar yapion.config.annotationproccessing.SerializingApplier ${buildDir}/classes/java/main\")\n    }\n}\nclasses.finalizedBy applySerializingProcessing\n\ndef shell(String command) {\n    def proc\n    if (!Os.isFamily(Os.FAMILY_WINDOWS)) {\n        proc = ['bash', '-c', command].execute()\n    } else {\n        proc = [\"cmd\", \"/c\", command].execute()\n    }\n    def out = new StringBuilder()\n    def err = new StringBuilder()\n    proc.waitForProcessOutput(out, err)\n    return [out.toString().trim(), err.toString().trim(), proc.exitValue()]\n}\n```\n\n# APIs/Libs/Other used\n- easymock/objenesis (https://github.com/easymock/objenesis)\n  - [V] 3.1\n  - [L] Apache-2.0\n- qos-ch/slf4j (https://github.com/qos-ch/slf4j)\n  - [V] 2.0.0-alpha1\n  - [L] MIT\n- classindex:classindex (https://github.com/atteo/classindex)\n  - [V] 3.4\n  - [L] Apache-2.0\n- rzwitserloot/lombok (https://github.com/rzwitserloot/lombok)\n  - [V] 1.18.6\n  - [L] MIT\n- rmuller/infomas-asl (https://github.com/rmuller/infomas-asl)\n  - [V] 3.0.5\n  - [L] Apache-2.0\n- asm (https://gitlab.ow2.org/asm/asm)\n  - [V] 9.2\n  - [L] ???\n- eppleton/frgaal (https://github.com/eppleton/frgaal)\n  - I am using the frgaal compiler to be able to use newer java features in an older environment.\n  - [V] 15.0.0\n  - [L] GPLv2+CPE\n\n* [V] Version\n* [L] License\n\n## YAPION datatypes\n- [Minecraft](https://github.com/yoyosource/YAPION-datatypes-mc) datatypes and serialization of those.\n- [pcollections](https://github.com/yoyosource/YAPION-datatypes-pcollections) datatypes and serialization of those.\n\n# Structure\nYAPION is heavily inspired by JSON and you can see some similarities between those object notations.\nBoth have objects as a key, value map and arrays. An YAPION structure can only be an object. An object starts with '{' and ends with '}'. Complementary an array starts with '\\[' ends with ']'.\nThe String representation of an YAPION Object or Array is mostly shorter than the JSON equivalent. This is achieved by eliminating most quotation marks and building the key value pairs in a enum like fashion.\nYAPION as a object notation has 5 types. Those are value, array, object, map (see: Map) and pointer (see: Pointer).\nValues are indicated by '(...)', arrays by '\\[...]', objects by '{...}', map by '\u003c...\u003e and pointers by '-\u003e...', the 3 dots are representing the value, or the key value pairs.\n\n## Benefits of YAPION\n- Most of the time JSON is nearly **1.15** to **1.4** time as long as the YAPION equivalent. This does not apply to the serialized stuff.\n- YAPION has native map support to easier serialize the Java counter part.\n- YAPION has native pointer support to easier serialize Java references to other Objects in multiple places.\n- YAPION's primitive types know what Java Type they should be.\n\n## JSON Equivalent\n### Objects, Key-Value pairs\n```\nExample for an empty YAPION object\nJSON:   {}\nYAPION: {}\n\nExample for an YAPION object with \"name\":\"yoyosource\" as value pair\nJSON:   {\"name\":\"yoyosource\"}\nYAPION: {name(yoyosource)}\n\nExample for an YAPION object with \"owner\":true as value pair\nJSON:   {\"owner\":true}\nYAPION: {owner(true)}\n\nExample for an YAPION object with \"owner\":\"true\" as value pair\nJSON:   {\"owner\":\"true\"}\nYAPION: {owner(\"true\")}\n\nExample for an YAPION object with \"price\":10 as value pair\nJSON:   {\"price\":10}\nYAPION: {price(10)}\n\nExample for an YAPION object with \"   price\":10 as value pair\nJSON:   {\"   price\":10}\nYAPION: {\\   price(10)}\n\nExample for an YAPION object with \"name\":\"yoyosource\" and \"owner\":true as value pairs\nJSON:   {\"name\":\"yoyosource\",\"owner\":true}\nYAPION: {name(yoyosource)owner(true)}\n```\n### Arrays\n```\nExample for an empty YAPION array\nJSON:   []\nYAPION: []\n\nExample for an YAPION array with numbers\nJSON:   [0,1,2,3,4,5,6,7,8,9,10]\nYAPION: [0,1,2,3,4,5,6,7,8,9,10]\n\nExample for an YAPION array with values\nJSON:   [true,false,null,\"Hello\"]\nYAPION: [true,false,null,Hello]\n\nExample for an YAPION array with objects\nJSON:   [{\"name\":\"yoyosource\",\"owner\":true},{\"name\":\"chaoscaot\",\"owner\":\"false\"}]\nYAPION: [{name(yoyosource)owner(true)},{name(chaoscaot)owner(\"false\")}]\n\nExample for embedding an YAPION array in another object.\nJSON:   {\"contributor\":[{\"name\":\"yoyosource\",\"owner\":true},{\"name\":\"chaoscaot\",\"owner\":\"false\"}]}\nYAPION: {contributor[{name(yoyosource)owner(true)},{name(chaoscaot)owner(\"false\")}]}\n```\n## YAPION Specific\n### Maps\n```\nExample for an empty YAPION map\n\u003c\u003e\n\nExample for an YAPION map with String to String mapping\n\u003c(hello):(\"1\")\u003e\n\nExample for an YAPION map with Integer to String mapping\n\u003c(1):(\"1\")\u003e\n\nExample for an YAPION map with Object to Object mapping\n\u003c{}:{}\u003e\n```\n\n### Pointer\nThese pointers point to another YAPION Object in the same serialization. For reconstructing the recursion this pointer points to the object it is referring to.\nA pointer is not a hash and is not intended to be secure. If 2 objects in your tree have the same pointer it will point to the first by default.\nAll pointers shown in here are valid pointers but are mostly meaningless because a pointer gets constructed by your current object state.\nThe list of chars for pointers is as follows: '0123456789ABCDEF'\n```\nExample for an YAPION pointer\n{hello-\u003e7FFFFFE53E6CBDFE}\n```\n\n### Comments\nComments are only supported by enabling them on the YAPIONParser.\n```\n{\n    /* This is a Comment */\n    name(yoyosource)\n}\n```\n\n# Code examples\n## [Parsing](https://github.com/yoyosource/YAPION/tree/master/src/main/java/yapion/hierarchy)\nThe Parser itself is located [here](https://github.com/yoyosource/YAPION/tree/master/src/main/java/yapion/parser).\nThe specifications are [here](https://github.com/yoyosource/YAPION/tree/master/src/main/java/yapion/parser/README.md).\n```java\nYAPIONObject yapionObject = YAPIONParser.parse(\"[...]\");\nYAPIONObject yapionObject = YAPIONParser.parse(new FileInputStream(new File([...])));\n```\n\n## [Serializing](https://github.com/yoyosource/YAPION/tree/master/src/main/java/yapion/serializing)\n```java\nYAPIONObject yapionObject = YAPIONSerializer.serialize([...]);\nYAPIONObject yapionObject = YAPIONSerializer.serialize([...], \"[...]\");\n```\n\n## [Deserializing](https://github.com/yoyosource/YAPION/tree/master/src/main/java/yapion/serializing)\n```java\nObject object = YAPIONDeserializer.deserialize([...]);\nObject object = YAPIONDeserializer.deserialize([...], \"[...]\");\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoyosource%2Fyapion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyoyosource%2Fyapion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoyosource%2Fyapion/lists"}