██╗███████╗ ██████╗ ███╗   ██╗     ██████╗ ██████╗ ██████╗ ███████╗ ██████╗ ███████╗███╗   ██╗
     ██║██╔════╝██╔═══██╗████╗  ██║    ██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔════╝ ██╔════╝████╗  ██║
     ██║███████╗██║   ██║██╔██╗ ██║    ██║     ██║   ██║██║  ██║█████╗  ██║  ███╗█████╗  ██╔██╗ ██║
██   ██║╚════██║██║   ██║██║╚██╗██║    ██║     ██║   ██║██║  ██║██╔══╝  ██║   ██║██╔══╝  ██║╚██╗██║
╚█████╔╝███████║╚██████╔╝██║ ╚████║    ╚██████╗╚██████╔╝██████╔╝███████╗╚██████╔╝███████╗██║ ╚████║
 ╚════╝ ╚══════╝ ╚═════╝ ╚═╝  ╚═══╝     ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝╚═╝  ╚═══╝
---------------------------------------------------------------------------------------------------
A library for converting JSON into code for multiple programming languages. Made with ❤️ using 🦀
[![Crates.io](https://img.shields.io/crates/v/jsoncodegen.svg)](https://crates.io/crates/jsoncodegen) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
JSONCodeGen is a library designed to convert JSON into code for various programming languages, facilitating the creation of classes, structs, or equivalent data structures for serialization and deserialization. ## 🧑‍💻 Usage add the library to your `Cargo.toml` file ```toml jsoncodegen = "*" ``` extract schema and generate source code for any language ```rust use jsoncodegen::{codegen, schema}; fn main() { let json: serde_json::Value = serde_json::from_str( r#" { "library": { "name": "City Library", "books": [ { "title": "1984", "author": "George Orwell", "genres": ["Dystopian", "Political Fiction"] }, { "title": "To Kill a Mockingbird", "author": "Harper Lee", "genres": ["Classic", "Historical Fiction"] } ] } } "#, ).unwrap(); let schema = schema::extract(json); let mut stdout = std::io::stdout().lock(); codegen::java(schema, &mut stdout).unwrap(); } ``` ### Output ```java // Books.java import com.fasterxml.jackson.annotation.*; public class Books { private String author; private List genres; private String title; public String getAuthor() { return author; } public void setAuthor(String value) { this.author = value; } public List getGenres() { return genres; } public void setGenres(List value) { this.genres = value; } public String getTitle() { return title; } public void setTitle(String value) { this.title = value; } } // Library.java import com.fasterxml.jackson.annotation.*; public class Library { private List books; private String name; public List getBooks() { return books; } public void setBooks(List value) { this.books = value; } public String getName() { return name; } public void setName(String value) { this.name = value; } } // Root.java import com.fasterxml.jackson.annotation.*; public class Root { private Library library; public Library getLibrary() { return library; } public void setLibrary(Library value) { this.library = value; } } ``` ### Complex Example ```json { "items": ["one", 2, 3.0], "point": { "x": 1, "y": 2.0 } } ``` ```java // Root.java import com.fasterxml.jackson.annotation.*; public class Root { private List items; private Point point; @JsonProperty("itemsこんにちは") public List getItems() { return items; } @JsonProperty("itemsこんにちは") public void setItems(List value) { this.items = value; } public Point getPoint() { return point; } public void setPoint(Point value) { this.point = value; } } // Point.java import com.fasterxml.jackson.annotation.*; public class Point { private Long x; private Double y; public Long getX() { return x; } public void setX(Long value) { this.x = value; } public Double getY() { return y; } public void setY(Double value) { this.y = value; } } // Items.java import java.io.IOException; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.annotation.*; @JsonSerialize(using = Items.Serializer.class) @JsonDeserialize(using = Items.Deserializer.class) public class Items { public String strVal; public Long longVal; public Double doubleVal; static class Serializer extends JsonSerializer { @Override public void serialize(Items value, JsonGenerator generator, SerializerProvider serializer) throws IOException { if (value.strVal != null) { generator.writeObject(value.strVal); return; } if (value.longVal != null) { generator.writeObject(value.longVal); return; } if (value.doubleVal != null) { generator.writeObject(value.doubleVal); return; } generator.writeNull(); } } static class Deserializer extends JsonDeserializer { @Override public Items deserialize(JsonParser parser, DeserializationContext ctx) throws IOException { Items value = new Items(); switch (parser.currentToken()) { case VALUE_NULL: break; case VALUE_STRING: value.strVal = parser.readValueAs(String.class); break; case VALUE_NUMBER_INT: value.longVal = parser.readValueAs(Long.class); break; case VALUE_NUMBER_FLOAT: value.doubleVal = parser.readValueAs(Double.class); break; default: throw new IOException("Cannot deserialize Items"); } return value; } } } ``` ## 🌟 Connect with Us M. Zahash – zahash.z@gmail.com Distributed under the MIT license. See `LICENSE` for more information. [https://github.com/zahash/](https://github.com/zahash/) ## 🤝 Contribute to JSONCodeGen! 1. Fork it () 2. Create your feature branch (`git checkout -b feature/fooBar`) 3. Commit your changes (`git commit -am 'Add some fooBar'`) 4. Push to the branch (`git push origin feature/fooBar`) 5. Create a new Pull Request ❤️ Show Some Love! If you find JSONCodeGen helpful, consider giving it a star on GitHub! Your support encourages continuous improvement and development.