[android]在 Retrofit2,如果从服务器的 json 是这个样子,怎么可以设置 json 类?

标签: json Android
发布时间: 2016/10/10 22:10:27
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

如果我要获取 json 形式就像如下,我应该如何设置 Postitem 类?

 {
    "author": "1122",
    "text": "ggg",
    "image": "https://www.landscape.com/irenepretty",
    "point": {
      "longitude": "-4.921875",
      "latitude": "13.974609375"
    }
 }

我写了

public class Postitem implements Serializable {
    @Expose
    private String author;
    @Expose
    private String text;
    @Expose
    private String image;
}

但我不知道如何将它与"点"

你能教我吗?

解决方法 1:

一种方法是让另一个类作为 Point 像这样︰

public class Point{
    @Expose
    private double latitude;
    @Expose
    private double longitude;
}

还有你 PostItem 像这样︰

public class Postitem implements Serializable {
    @Expose
    private String author;
    @Expose
    private String text;
    @Expose
    private String image;
    @Expose
    private Point point;
}

另一种方式是,只是将它们存储为 jsonobject 像这样︰

如果您正在使用 Gson 你可以像这样使用它︰

public class Postitem implements Serializable {
    @Expose
    private String author;
    @Expose
    private String text;
    @Expose
    private String image;
    @Expose
    private JSONObject point;
}

然后你需要反序列化程序的就是这个样子︰

public class JsonObjectDeserializer<J> implements com.google.gson.JsonDeserializer<JSONObject> {
    @Override
    public JSONObject deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        if (json.isJsonObject()) {
            String value = json.getAsJsonObject().toString();
            try {
                return new JSONObject(value);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else if (json.isJsonArray()) {
            JSONObject object = new JSONObject();
            try {
                object.put("array", new JSONArray(json.getAsJsonArray().toString()));
                return object;
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

来,然后你需要注册串并转换电路改造像这样︰

Retrofit.Builder builder = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory
                        .create(
                                new GsonBuilder()
                                        .registerTypeAdapter(
                                                JSONObject.class,
                                                new JsonObjectDeserializer()
                                        )
                                        .create()));
赞助商