JSON 与JavaBean转换

版权声明:如果喜欢的话,可以撩我哟,此处没有联系方式,想要就自己找哈。 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());
    }

}

猜你喜欢

转载自blog.csdn.net/qq_39384184/article/details/84863252
今日推荐