【问题标题】:Handle JSON Response - Both JsonArray & JsonObject for same Attribute based on response - Java - Android Retrofit处理 JSON 响应 - 基于响应的相同属性的 JsonArray 和 JsonObject - Java - Android Retrofit
【发布时间】:2018-11-04 11:56:38
【问题描述】:

我得到了两种类型的 Json 响应。

一个是:

{
  "status": true,
  "datetime": "",
  "data": [
    {
      "name": "xxx"
    }
  ]
}

另一种格式是:

{
  "status": true,
  "datetime": "",
  "data":
  {
    "name": "aaa"
  }
}

对象“数据”在某些响应上将是JsonObject,在某些响应上将是JsonArray,如何处理这两种类型的请求。

我正在使用 Retrofit api 进行通信。

【问题讨论】:

    标签: android arrays json retrofit2


    【解决方案1】:

    如果您使用GsonConverterFactory,则可以使用JsonElement 来表示JsonObject 和JsonArray,因为它们都扩展了JsonElement。

    然后你可以使用JsonElement#isJsonArray()的方法来检查并采取相应的措施。

    【讨论】:

      【解决方案2】:

      您可以获取“数据”作为 JsonElement 并检查它:分别为 JsonObject 或 JsonArray。比如可以写自定义JsonDeserializer:

      class CustomDeserializer implements JsonDeserializer<YourModel> {
      
          @Override
          public YourModel deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
              JsonObject responseObj = json.asJsonObject;
              JsonElement data = responseObj.get("data");
              // get your dinamic data
              if (data.isJsonObject()) {
              // parse as object
              } else if (data.isJsonArray()) {
              // parse as array
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2020-05-14
        • 1970-01-01
        • 2016-07-02
        • 2022-01-11
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多