5 unstable releases
0.3.1 | Sep 7, 2024 |
---|---|
0.3.0 | Sep 6, 2024 |
0.2.1 | Sep 4, 2024 |
0.2.0 | Sep 4, 2024 |
0.1.0 | Jul 30, 2024 |
#482 in Development tools
28 downloads per month
Used in jcg
55KB
1K
SLoC
██╗███████╗ ██████╗ ███╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗ ██████╗ ███████╗███╗ ██╗ ██║██╔════╝██╔═══██╗████╗ ██║ ██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔════╝ ██╔════╝████╗ ██║ ██║███████╗██║ ██║██╔██╗ ██║ ██║ ██║ ██║██║ ██║█████╗ ██║ ███╗█████╗ ██╔██╗ ██║ ██ ██║╚════██║██║ ██║██║╚██╗██║ ██║ ██║ ██║██║ ██║██╔══╝ ██║ ██║██╔══╝ ██║╚██╗██║ ╚█████╔╝███████║╚██████╔╝██║ ╚████║ ╚██████╗╚██████╔╝██████╔╝███████╗╚██████╔╝███████╗██║ ╚████║ ╚════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ --------------------------------------------------------------------------------------------------- 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.
🧑💻 Usage
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();
}
Output
// 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; }
}
Complex Example
{
"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;
}
}
}
🌟 Connect with Us
M. Zahash – zahash.z@gmail.com
Distributed under the MIT license. See LICENSE
for more information.
🤝 Contribute to JSONCodeGen!
- Fork it (https://github.com/zahash/jsoncodegen/fork)
- Create your feature branch (
git checkout -b feature/fooBar
) - Commit your changes (
git commit -am 'Add some fooBar'
) - Push to the branch (
git push origin feature/fooBar
) - 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.
Dependencies
~0.9–1.4MB
~26K SLoC