Java 使用GSON自定义解析JSON字段

Java 使用GSON自定义解析JSON字段,java,android,json,gson,Java,Android,Json,Gson,我有以下建议: 和模型 public class MyModel { private int id; private String title; private String thing; } 我用gson解析它 并希望取得成果: myModel.id -> 1 myModel.title -> "Title blabla" myModel.thing-> "{ "field1": 1, "fie

我有以下建议:

和模型

public class MyModel {
    private int id;
    private String title;
    private String thing;
}
我用gson解析它

并希望取得成果:

myModel.id -> 1
myModel.title -> "Title blabla"
myModel.thing-> "{
              "field1": 1,
              "field2": "field2",
              "etc": "etc.."
             }"
换句话说,我不希望某些字段被反序列化,而是保留为原始的共同响应json字符串


如何使用gson实现这一点?

如果要解析类似的JSON对象,必须使用内部类,例如:

public class MyModel {
    private int id;
    private String title;
    private String thing;
     public static class thing
     {
     private string field1;
     private string field2;
     etc etc
     }
}

如果要解析类似的JSON对象,必须使用内部类,例如:

public class MyModel {
    private int id;
    private String title;
    private String thing;
     public static class thing
     {
     private string field1;
     private string field2;
     etc etc
     }
}

您可以将内容更改为映射,然后将其字符串化以生成所需的结果。

您可以将内容更改为映射,然后将其字符串化以生成所需的结果。

您可以实现自己的序列化程序和Desiralizer,请参见示例。

您可以实现自己的序列化程序和Desiralizer,参见示例。

您可以将字符串更改为对象,以便将其反序列化为相同的JSON字符串。可能是这样的:

import com.google.gson.Gson;

public class Answers {
    public static void main(String[] args) {
        String json = "{" 
                + "    \"id\": 1,"
                + "    \"title\": \"Title blabla\"," + "    \"thing\": {"
                + "        \"field1\": 1," + "        \"field2\": \"field2\","
                + "        \"etc\": \"etc..\"" + "    }" 
                + "}";
        Gson gson = new Gson();
        MyModel myModel = (MyModel) gson.fromJson(json, MyModel.class);
        System.out.println(gson.toJson(myModel));

    }

    class MyModel {
        private int id;
        private String title;
        private Object thing;
    }

}
输出:

{"id":1,"title":"Title blabla","thing":{"field1":1.0,"field2":"field2","etc":"etc.."}}

您可以将字符串更改为对象,以便将其反序列化为相同的JSON字符串。可能是这样的:

import com.google.gson.Gson;

public class Answers {
    public static void main(String[] args) {
        String json = "{" 
                + "    \"id\": 1,"
                + "    \"title\": \"Title blabla\"," + "    \"thing\": {"
                + "        \"field1\": 1," + "        \"field2\": \"field2\","
                + "        \"etc\": \"etc..\"" + "    }" 
                + "}";
        Gson gson = new Gson();
        MyModel myModel = (MyModel) gson.fromJson(json, MyModel.class);
        System.out.println(gson.toJson(myModel));

    }

    class MyModel {
        private int id;
        private String title;
        private Object thing;
    }

}
输出:

{"id":1,"title":"Title blabla","thing":{"field1":1.0,"field2":"field2","etc":"etc.."}}

您是否尝试将“thing”类型设置为String?如果它不起作用,那么你将不得不编写自己的反序列化程序是的,我尝试获取运行时错误你尝试过将“thing”类型设置为String吗?如果它不起作用,那么你将不得不编写你自己的反序列化程序是的,我试图得到运行时错误我不知道哪些字段可以在内部类中,东西没有永久结构我不知道哪些字段可以在内部类中,东西没有永久结构