Crates.io | jsoncodegen |
lib.rs | jsoncodegen |
version | 0.3.1 |
source | src |
created_at | 2024-07-30 18:43:59.235197 |
updated_at | 2024-09-07 06:04:32.276238 |
description | json code generation |
homepage | |
repository | https://github.com/zahash/jsoncodegen/ |
max_upload_size | |
id | 1320193 |
size | 55,869 |
██╗███████╗ ██████╗ ███╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗ ██████╗ ███████╗███╗ ██╗ ██║██╔════╝██╔═══██╗████╗ ██║ ██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔════╝ ██╔════╝████╗ ██║ ██║███████╗██║ ██║██╔██╗ ██║ ██║ ██║ ██║██║ ██║█████╗ ██║ ███╗█████╗ ██╔██╗ ██║ ██ ██║╚════██║██║ ██║██║╚██╗██║ ██║ ██║ ██║██║ ██║██╔══╝ ██║ ██║██╔══╝ ██║╚██╗██║ ╚█████╔╝███████║╚██████╔╝██║ ╚████║ ╚██████╗╚██████╔╝██████╔╝███████╗╚██████╔╝███████╗██║ ╚████║ ╚════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ --------------------------------------------------------------------------------------------------- A library for converting JSON into code for multiple programming languages. Made with ❤️ using 🦀
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.
add the library to your Cargo.toml
file
jsoncodegen = "*"
extract schema and generate source code for any language
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();
}
// Books.java
import com.fasterxml.jackson.annotation.*;
public class Books {
private String author;
private List<String> genres;
private String title;
public String getAuthor() { return author; }
public void setAuthor(String value) { this.author = value; }
public List<String> getGenres() { return genres; }
public void setGenres(List<String> 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> books;
private String name;
public List<Books> getBooks() { return books; }
public void setBooks(List<Books> 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; }
}
{
"items": ["one", 2, 3.0],
"point": {
"x": 1,
"y": 2.0
}
}
// Root.java
import com.fasterxml.jackson.annotation.*;
public class Root {
private List<Items> items;
private Point point;
@JsonProperty("itemsこんにちは")
public List<Items> getItems() { return items; }
@JsonProperty("itemsこんにちは")
public void setItems(List<Items> 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<Items> {
@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<Items> {
@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;
}
}
}
M. Zahash – zahash.z@gmail.com
Distributed under the MIT license. See LICENSE
for more information.
git checkout -b feature/fooBar
)git commit -am 'Add some fooBar'
)git push origin feature/fooBar
)❤️ Show Some Love!
If you find JSONCodeGen helpful, consider giving it a star on GitHub! Your support encourages continuous improvement and development.