根据java实体拼接可被gson解析的json字符串

根据以下java实体类拼接字符串,使用谷歌的GJONS可以解析,
1.Header header = (Header) gson.fromJson(json, Header.class);
2.Data entity = (Data) gson.fromJson(header.getData(), Data.class)

实体1 header
private String dataType;
private String sendTime;
private String data;

实体2 data
private T newData;
private List modProps;
private Object others;

实体3 ModProperty
private String name;
private FieldValue oldValue;
private FieldValue newValue;

实体4 FieldValue
private String vString;
private JsonArray vArray;
private JsonObject vObject;

  • 说明:
  • a.字符串必须满足以上实体
  • b.字符串使用谷歌gson能够准确的解析出来
  • c.newData中数据格式是{"name":"张三","tel":"12345678"...}

我建议你先把实体用Gson转成json串,然后反向推出拼接字符串

通过重写toString方法,然后将每个对象按照一定顺序加在一起就可以完成拼接。

 public class GsonTest {
    static class Header {
        private String dataType;
        private String sendTime;
        private String data;
        //getter and setter
    }
    static class FieldValue {
        private String vString;
        private JsonArray vArray;
        private JsonObject vObject;
        //getter and setter
    }
    static class ModProperty {
        private String name;
        private FieldValue oldValue;
        private FieldValue newValue;
        //getter and setter
    }
    static class Data<T> {
        private T newData;
        private List<ModProperty> modProps;
        private Object others;
        //getter and setter
    }
    public static void main(String[] args) {
        test1();
        System.out.println("==================================");
        test2();
    }
    public static void test1() {
        Gson gson = new Gson();
        Header header = new Header("a", "b", "c");
        System.out.println(gson.toJson(header));//打印 {"dataType":"a","sendTime":"b","data":"c"}
        ///////////////////////////////////////////////////
        String dataType = "a";
        String sendTime = "b";
        String data = "c";
        String headerJson = "{\"dataType\":\"" + dataType + "\",\"sendTime\":\"" + sendTime + "\",\"data\":\"" + data + "\"}";
        header = gson.fromJson(headerJson, Header.class);
        System.out.println(header.getDataType() + "," + header.getSendTime() + "," + header.getData());
    }
    public static void test2() {
        Gson gson = new Gson();
        Data<String> dataObject = new Data<>();
        List<ModProperty> modProperties = new ArrayList<>();
        ModProperty modProperty = new ModProperty();
        modProperty.setName("哈哈哈");
        FieldValue newValue = new FieldValue();
        newValue.setvString("范德萨法师分散");
        JsonArray jsonArray = new JsonArray();
        jsonArray.add(1);
        jsonArray.add(3);
        jsonArray.add(3);
        newValue.setvArray(jsonArray);
        modProperty.setNewValue(newValue);
        modProperty.setOldValue(newValue);
        modProperties.add(modProperty);
        dataObject.setModProps(modProperties);
        dataObject.setNewData("范德萨发士大夫撒");
        dataObject.setOthers("范德萨法师发射我");
        System.out.println(gson.toJson(dataObject));
        /////////////////////////////////
        String dataJson = "{\"newData\":\"范德萨发士大夫撒\",\"modProps\":[{\"name\":\"哈哈哈\",\"oldValue\":{\"vString\":\"范德萨法师分散\",\"vArray\":[1,3,3]},\"newValue\":{\"vString\":\"范德萨法师分散\",\"vArray\":[1,3,3]}}],\"others\":\"范德萨法师发射我\"}";
        Data entity = (Data) gson.fromJson(dataJson, Data.class);
        System.out.println(entity.getNewData());
        System.out.println(entity.getOthers());
        System.out.println(((ModProperty) entity.getModProps().get(0)).getName());
    }
}