Convert ints to booleans

后端 未结 2 1911
北海茫月
北海茫月 2021-02-01 04:32

Is there a way that I can convert int/short values to booleans? I\'m receiving JSON that looks like this:

{ is_user: \"0\", is_guest: \"0\" }

I

2条回答
  •  伪装坚强ぢ
    2021-02-01 05:07

    Start by getting Gson 2.2.2 or later. Earlier versions (including 2.2) don't support type adapters for primitive types. Next, write a type adapter that converts integers to booleans:

    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);
        }
      }
    };
    

    ... and then use this code to create the Gson instance:

      Gson gson = new GsonBuilder()
          .registerTypeAdapter(Boolean.class, booleanAsIntAdapter)
          .registerTypeAdapter(boolean.class, booleanAsIntAdapter)
          .create();
    

提交回复
热议问题