版权声明:如果喜欢的话,可以撩我哟,此处没有联系方式,想要就自己找哈。 https://blog.csdn.net/qq_39384184/article/details/84863252
待测试的 Java 对象
- JsonObject:
public class JsonObject {
private long id;
private String orderId;
private JsonSubObject subObject;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public JsonSubObject getSubObject() {
return subObject;
}
public void setSubObject(JsonSubObject subObject) {
this.subObject = subObject;
}
}
- JsonSubObject:
public class JsonSubObject {
private int code;
private String msg;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
Json-lib
使用 JSONObject 的 toString 和 toBean 方法完成 Json 和 JavaBean 之间的转换,如果对象中含有复杂对象,在 Json 反序列化为 JavaBean 时需要传入ClassMap<String, Class>
- Json-lib:
import net.sf.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class JsonlibDemo {
public static void main(String[] args) {
// Java序列化为Json
JsonObject obj = new JsonObject();
obj.setId(1l);
obj.setOrderId("2018_12_12");
JsonSubObject subObject = new JsonSubObject();
subObject.setCode(1001);
subObject.setMsg("message");
obj.setSubObject(subObject);
// 使用 JSONObject,toString or toBean
JSONObject jsonObject = JSONObject.fromObject(obj);
System.out.println("json string:");
System.out.println(jsonObject.toString());
// Json反序列化为Java
// 如果对象中含有复杂子对象,如:List、Map或自定义Javabean的时候需要如下的ClassMap,否则早转换过程中会报错
Map<String, Class> classMap = new HashMap<>();
classMap.put("subObject", JsonSubObject.class);
obj = (JsonObject) JSONObject.toBean(jsonObject, JsonObject.class,
classMap);
System.out.println("Java Object:");
System.out.println(obj);
System.out.println("id:" + obj.getId());
System.out.println("orderId:" + obj.getOrderId());
System.out.println("sub code:" + obj.getSubObject().getCode());
System.out.println("sub msg:" + obj.getSubObject().getMsg());
}
}
Gson
使用 Gson 的 toJson 和 fromJson 方法完成 Json 和 JavaBean 之间的转换。
- Gson:
import com.google.gson.Gson;
public class GsonDemo {
public static void main(String[] args) {
String jsonString;
// Java序列化为Json
JsonObject obj = new JsonObject();
obj.setId(1l);
obj.setOrderId("2018_12_12");
JsonSubObject subObject = new JsonSubObject();
subObject.setCode(1001);
subObject.setMsg("message");
obj.setSubObject(subObject);
// 使用 Gson 对象的 toJson or fromJson
Gson gson = new Gson();
jsonString = gson.toJson(obj);
System.out.println("json string:");
System.out.println(jsonString);
// Json反序列化为Java
obj = gson.fromJson(jsonString, obj.getClass());
System.out.println("Java Object:");
System.out.println(obj);
System.out.println("id:" + obj.getId());
System.out.println("orderId:" + obj.getOrderId());
System.out.println("sub code:" + obj.getSubObject().getCode());
System.out.println("sub msg:" + obj.getSubObject().getMsg());
}
}
Jackson
使用 ObjectMapper 的 writeValueAsString 和 readValue 方法完成 Json 和 JavaBean 之间的转换。
可以在不知道JSON字符串所属对象类型的情况下,对JSON字符串中的某些属性进行遍历和修改,比如,设置或查询一些报文头字段。
- Jackson:
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ObjectNode;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class JacksonDemo {
public static void main(String[] args) {
String jsonString = null;
// Java序列化为Json
try {
// 创建一个Java对象
// ObjectMapper 的 writeValueAsString or readValue
Map jsonMap = new HashMap();
ObjectMapper mapper = new ObjectMapper();
jsonMap.put("param1", "value1");
jsonMap.put("param2", "value2");
JsonObject obj = new JsonObject();
obj.setId(1l);
obj.setOrderId("2018_12_12");
JsonSubObject subObject = new JsonSubObject();
subObject.setCode(1001);
subObject.setMsg("message");
obj.setSubObject(subObject);
// 转化为Json字符串
jsonMap.put("param3", mapper.writeValueAsString(obj));
jsonString = mapper.writeValueAsString(jsonMap);
System.out.println("Json String:");
System.out.println(jsonString);
} catch (IOException e) {
e.printStackTrace();
}
// Json反序列化为Java
try {
ObjectMapper mapper2 = new ObjectMapper();
Map jsonMap = mapper2.readValue(jsonString, Map.class);
System.out.println("Java Object:");
System.out.println(jsonMap);
System.out.println("Json Node:");
JsonNode root = mapper2.readTree(jsonString);
// 可以在不知道JSON字符串所属对象类型的情况下,对JSON字符串中的某些属性进行遍历和修改,比如,设置或查询一些报文头字段。
JsonNode node = root.findValue("param3");
System.out.println(node);
// 通过强制转换为ObjectNode,就可以对当前节点进行修改
((ObjectNode) root).put("pa", "v1");
System.out.println(root);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Fastjson
使用 JSON 对象的 toJSONString 和 parseObject 方法完成 Json 和 JavaBean 之间的转换。
- Fastjson
import com.alibaba.fastjson.JSON;
public class FastjsonDemo {
public static void main(String[] args) {
String jsonString;
// Java序列化为Json
JsonObject obj = new JsonObject();
obj.setId(1l);
obj.setOrderId("2018_12_12");
JsonSubObject subObject = new JsonSubObject();
subObject.setCode(1001);
subObject.setMsg("message");
obj.setSubObject(subObject);
// JSON 对象的 toJSONString or parseObject
jsonString = JSON.toJSONString(obj);
System.out.println("json string:");
System.out.println(jsonString);
// Json反序列化为Java
obj = JSON.parseObject(jsonString, JsonObject.class);
System.out.println("Java Object:");
System.out.println(obj);
System.out.println("id:" + obj.getId());
System.out.println("orderId:" + obj.getOrderId());
System.out.println("sub code:" + obj.getSubObject().getCode());
System.out.println("sub msg:" + obj.getSubObject().getMsg());
}
}