Skip to content

Instantly share code, notes, and snippets.

@RMuskovets
Last active August 6, 2018 06:35
Show Gist options
  • Save RMuskovets/afa838af749dfd48020c851b0ae08bb5 to your computer and use it in GitHub Desktop.
Save RMuskovets/afa838af749dfd48020c851b0ae08bb5 to your computer and use it in GitHub Desktop.
JSON Serializer/Deserializer.

Bean2JSON

Bean2JSON is simple program to serialize Java classes to JSON.

Features

Bean2JSON can:

  1. Serialize ALL members of class instance.
  2. Work with String, char, int and so much.
  3. Serialize Iterables into JSON array.
  4. Save the class name of object.

Bean2JSON cannot now, but will can later:

  1. Serialize Maps into JSON dict.
  2. Work with native arrays.

Library dependencies

javax.json

Author

Roman Myskovets
E-mail: rmuskovets@gmail.com

import javax.json.*;
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
public class Bean2JSON {
public static void main(String[] args) throws Exception {
Object inst;
String json;
Class clazz = Class.forName(args[0]);
inst = clazz.newInstance();
json = buildFor(inst).build().toString();
System.out.println(json);
}
private static JsonObjectBuilder buildFor(Object bean) throws Exception {
JsonObjectBuilder obj = Json.createObjectBuilder();
Class clazz = bean.getClass();
obj.add("className", clazz.getName());
for (Field f : clazz.getDeclaredFields()) {
Object val = value(bean, f);
Object toAdd;
if (Arrays.asList(
"Integer", "String", "Double", "Float", "Byte", "Short", "Long", "Character"
).contains(val.getClass().getSimpleName())) {
toAdd = val;
} else if (Class.forName("java.lang.Iterable").isAssignableFrom(val.getClass())) {
JsonArrayBuilder b = Json.createArrayBuilder();
for (Object c : (Iterable) val) {
b.add(buildFor(c));
}
toAdd = b;
} else {
toAdd = buildFor(val);
}
//obj.add(f.getName(), (toAdd instanceof JsonObjectBuilder ? (JsonObjectBuilder) toAdd : toAdd.toString()));
if (toAdd instanceof JsonObjectBuilder) {
obj.add(f.getName(), (JsonObjectBuilder) toAdd);
} else if (toAdd instanceof JsonArrayBuilder) {
obj.add(f.getName(), (JsonArrayBuilder) toAdd);
} else {
obj.add(f.getName(), toAdd.toString());
}
}
return obj;
}
private static Object value(Object a, Field b) {
try {
return b.get(a);
} catch (Exception e) {
b.setAccessible(true);
try {
return b.get(a);
} catch (Exception e1) {}
}
return null;
}
}
// TODO: Write deserializer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment