程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用Gson将单个json条目解析为多个对象大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用Gson将单个json条目解析为多个对象?

开发过程中遇到使用Gson将单个json条目解析为多个对象的问题如何解决?下面主要结合日常开发的经验,给出你关于使用Gson将单个json条目解析为多个对象的解决方法建议,希望对你解决使用Gson将单个json条目解析为多个对象有所启发或帮助;

使Gson理解它的方法是通过TypeAdapter为您的Test类创建一个自定义反序列化器。您可以在《 找到信息。它不完全是 手动解析 ,但没什么不同,因为您必须告诉Gson如何处理每个JsON值…

应该是这样的

private class TestDeserializer implements JsonDeserializer<Test> {
  public Test deserialize(JsonElement Json, Type typeOfT, JsonDeserializationContext context)
      throws JsonParseException {

    JsonObject obj = Json.getAsJsonObject();

    int id = obj.get("ID").getAsInt();
    String name = obj.get("name").getAsString();

    double distance = obj.get("param_distance").getAsDouble();
    int sampling = obj.get("param_sampling").getAsInt();

    //assuming you have suitable constructors...
    Test test = new Test(ID, name, new Parameters(distance, sampling));

    return test;
  }
}

然后,您必须向注册TypeAdapter

GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(Test.class, new TestDeserializer());

最后,您只需要照常解析JsON,即可:

gson.fromJson(yourjsonString, Test.class);

Gson将自动使用您的自定义反序列化器将JsON解析为您的Test类。

解决方法

我有一个看起来像这样的json响应:

{
    "id":"001","name":"Name","param_distance":"10","param_sampling":"2"
}

我有两个类:Teste和Parameters

public class Test {
    private int id;
    private String name;
    private Parameters params;
}

public class Parameters {
    private double distance;
    privatE int sampling;
}

我的问题是:有没有一种方法可以让Gson理解某些json属性应该进入Parameters类,还是唯一的方法是“手动”解析此属性?

编辑

好吧,只是为了让我在@mikO的答案中的评论更具可读性:

我将对象列表添加到json输出中,因此json响应应如下所示:

  {
    "id":"001","param_sampling":"2","events":[
        {
            "id":"01","value":"22.5"
        },{
            "id":"02","value":"31.0"
        }
    ]
}

Deserializer类将如下所示:

public class TestDeserializer implements JsonDeserializer<Test> {
    @Override
    public Test deserialize(JsonElement json,Type type,JsonDeserializationContext context) throws JsonParseException {

        JsonObject obj = json.getAsJsonObject();

        Test test = new Test();
        test.setId(obj.get("id").getAsInt());
        test.setName(obj.get("name").getAsString());

        Parameters params = new Parameters();
        params.setDistance(obj.get("param_distance").getAsDouble());
        params.setSampling(obj.get("param_sampling").getAsInt());
        test.setParameters(params);

        Gson eventGson = new Gson();
        Type eventsType = new TypeToken<List<Event>>(){}.getType();
        List<Event> eventList = eventGson.fromJson(obj.get("events"),eventsTypE);
        test.setEvents(eventList);
        return test;
    }
}

并做:

GsonBuilder gBuilder = new GsonBuilder();
gBuilder.registerTypeAdapter(Test.class,new TestDeserializer());
Gson gson = gBuilder.create();
Test test = gson.fromJson(reader,Test.class);

以我想要的方式给我测试对象。

大佬总结

以上是大佬教程为你收集整理的使用Gson将单个json条目解析为多个对象全部内容,希望文章能够帮你解决使用Gson将单个json条目解析为多个对象所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。