我正在解析的API返回大小为1的数组的对象时遇到问题。
例如,有时API会响应:
{
"monument": [
{
"key": 4152,
"name": "MTS - Corporate Head Office",
"categories": {},
"address": {}
},
{
"key": 4151,
"name": "Canadian Transportation Agency",
"categories": {},
"address": {}
},
{
"key": 4153,
"name": "Bank of Montreal Building",
"categories": {},
"address": {}
}
],
}
但是,如果monument
数组只有1个项目,它将变成一个对象(请注意缺少[]
括号),如下所示:
{
"monument": {
"key": 4152,
"name": "MTS - Corporate Head Office",
"categories": {},
"address": {}
}
}
如果我这样定义模型,则仅返回单个项目时会出现错误:
public class Locations {
public List<Monument> monument;
}
如果仅返回单个项目,则会出现以下错误:
Expected BEGIN_OBJECT but was BEGIN_ARRAY ...
如果我这样定义我的模型:
public class Locations {
public Monument monument;
}
API返回一个数组我得到了相反的错误
Expected BEGIN_ARRAY but was BEGIN_OBJECT ...
我无法在模型中定义多个具有相同名称的项目。我该如何处理?
注意:我无法更改API。
作为我以前答案的补充,这是使用的解决方案TypeAdapter
。
public class LocationsTypeAdapter extends TypeAdapter<Locations> {
private Gson gson = new Gson();
@Override
public void write(JsonWriter jsonWriter, Locations locations) throws IOException {
gson.toJson(locations, Locations.class, jsonWriter);
}
@Override
public Locations read(JsonReader jsonReader) throws IOException {
Locations locations;
jsonReader.beginObject();
jsonReader.nextName();
if (jsonReader.peek() == JsonToken.BEGIN_ARRAY) {
locations = new Locations((Monument[]) gson.fromJson(jsonReader, Monument[].class));
} else if(jsonReader.peek() == JsonToken.BEGIN_OBJECT) {
locations = new Locations((Monument) gson.fromJson(jsonReader, Monument.class));
} else {
throw new JsonParseException("Unexpected token " + jsonReader.peek());
}
jsonReader.endObject();
return locations;
}
}
问题内容: 我正在构建一个Android应用程序,并且正在使用Square的Retrofit库进行短暂的网络调用。我是Java和Android的新手。到目前为止,我已经像这样构造了请求: 并这样称呼他们: 我需要实现一个接受可变数量(不超过10个左右)参数的请求。必须单独定义它们并传递null或为给定请求中不存在的传递一些东西,这很麻烦。有没有一种方法可以为请求定义接口,使其接受变量号或参数,并@
问题内容: 我在SpringData中使用QueryDSL。我说表,我创建了实体类, 我写了以下 服务 方法 如上所述,我评论了。如何使用 QueryDSL 在可选参数 QueryDSL 使用Spring的数据? 谢谢 :) 问题答案: 可以用作布尔表达式的动态生成器:
我将QueryDSL与SpringData一起使用。我有表say,并创建了实体类say,我编写了以下服务方法 与上面一样,我注释了。如何在使用Spring数据的QueryDSL中对可选参数使用QueryDSL?
伙计们如何处理这样的代码和警告? 我已经尝试过许多,但它总是在单独的线程中运行,我需要暂停当前的线程。 请帮帮忙..
如何在swagger UI中将数组对象传递给参数?这是一个GET请求。我有一个数据类型为Array[]和参数类型为query的请求参数。我已经尝试了下面的阵列,它似乎不工作。我不熟悉招摇的用法。无法解决问题。 型:
问题内容: 我正在使用JPA,hibernate3。 当没有空值或空值时,此查询就像一个超级按钮。但是 traceEntityVO.getLotNumber(),traceEntityVO.getMfrLocId(),traceEntityVO.getExpDate()的 值可能为null或为空 。 在这种情况下,将针对变量而不是 null 条件来检查值’null’或’‘ 。当我不确定参数值是否为