将英特尔转换为布尔值
有没有办法可以将int / short值转换为布尔值? 我收到的JSON看起来像这样:
{ is_user: "0", is_guest: "0" }
我正在尝试将其序列化为如下所示的类型:
class UserInfo { @SerializedName("is_user") private boolean isUser; @SerializedName("is_guest") private boolean isGuest; /* ... */ }
我怎样才能让Gson将这些int / short字段翻译成布尔值?
首先获取Gson 2.2.2或更高版本。 早期版本(包括2.2)不支持基本类型的类型适配器。 接下来,编写一个将整数转换为布尔值的类型适配器:
private static final TypeAdapter booleanAsIntAdapter = new TypeAdapter () { @Override public void write(JsonWriter out, Boolean value) throws IOException { if (value == null) { out.nullValue(); } else { out.value(value); } } @Override public Boolean read(JsonReader in) throws IOException { JsonToken peek = in.peek(); switch (peek) { case BOOLEAN: return in.nextBoolean(); case NULL: in.nextNull(); return null; case NUMBER: return in.nextInt() != 0; case STRING: return Boolean.parseBoolean(in.nextString()); default: throw new IllegalStateException("Expected BOOLEAN or NUMBER but was " + peek); } } };
…然后使用此代码创建Gson实例:
Gson gson = new GsonBuilder() .registerTypeAdapter(Boolean.class, booleanAsIntAdapter) .registerTypeAdapter(boolean.class, booleanAsIntAdapter) .create();
如果你是以整体或短裤的forms阅读它们,那么你可以
boolean b = (i != 0)
其中b是你想得到的布尔值,i是int或short值。
如果您正在以字符串forms阅读它们,那么您需要
boolean b = !s.equals("0"); // use this if you WANT null pointer exception // if the string is null, useful for catching // bugs
要么
boolean b = !"0".equals(s); // avoids null pointer exception, but may silently // let a bug through