处理JSON响应-基于响应的相同属性的JsonArray和JsonObject-Java-Android改装

时间:2018-11-04 11:56:39

标签: android arrays json retrofit2

我得到两种类型的Json Response。

一个是:

import React from 'react';
import { Text } from 'react-native';
import Card from './Card';

const AlbumDetail = (props) => (
    <Card>
      <Text styles={props.album.title}></Text>
    </Card>
);

export default AlbumDetail;

另一种格式是:

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

对象“数据”在某些响应上将是{ "status": true, "datetime": "", "data": { "name": "aaa" } } ,在某些响应上将是JsonObject,如何处理两种类型的请求。

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

2 个答案:

答案 0 :(得分:0)

如果您使用的是GsonConverterFactory,则可以使用JsonElement来表示JsonObjectJsonArray,因为它们都扩展了JsonElement

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

答案 1 :(得分:0)

您可以将“数据”作为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
        }
    }