【问题标题】:What is the best way to filter out a Json field if its of a specific type?如果 Json 字段属于特定类型,那么过滤掉 Json 字段的最佳方法是什么?
【发布时间】:2018-10-01 12:27:24
【问题描述】:

在 Android (Java) 环境中,我使用 Gson 来处理序列化/反序列化。在我发出的一个 GET 请求中,API 返回一个布尔值或字段“keyName”的对象。当值为布尔值时如何忽略此字段?

我尝试使用用户定义的排除策略,但我认为它不能用于忽略特定类型。

public class MovieAccountState {

@SerializedName("rated")
private Rating mRated;
@SerializedName("watchlist")
private boolean mWatchlisted;

public Rating getRated() {
    return mRated;
}

public boolean isWatchlisted() {
    return mWatchlisted;
}
}

*编辑:没有太多相关代码要发布,Gson 为我处理从 Json 创建的对象,因此来自 api 的“评级”字段要么有一个布尔值,要么有一个对象。如果有办法让我在 Gson 创建对象之前拦截 Json 数据。

【问题讨论】:

  • 你能发布你的代码吗?
  • 对同一个字段使用不同的类型通常是不好的。 Best 是基于意见的,但这里大多数人的意见是,修复它的 最佳 方法是为此使用不同的字段。
  • @VladyslavMatviienko 我无法控制 API,它是第三方服务。我必须在客户端上找到解决方案。
  • 您也可以为您的模型类创建自定义反序列化器,因此您将手动反序列化此字段。

标签: android gson


【解决方案1】:

一种快速的方法是try-catch

try {
    JSONObject obj = jsonObj.getJSONObject("keyName");
} catch(JSONException e) {
    // Do Nothing or something else
}

【讨论】:

  • 这是针对这种情况的正确解决方案。但是对布尔值和对象使用相同的键名是不好的。您应该更改密钥。
  • @Rohit5k2 我无法控制 API,它是第三方服务。
  • 好吧,在这种情况下,这是你能做的最好的事情。
  • 请记住,这个 sn-p 也可以在 json 响应中未定义密钥的情况下使用
  • 只是检查类型而不是 try..catch 的一个小改进,因为最好避免异常:stackoverflow.com/a/15920281/1568530
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
相关资源
最近更新 更多