处理翻新的空json数组

时间:2018-07-16 06:49:57

标签: android arrays json retrofit

这是我面临的问题:

With data

在acf字段中响应数据

enter image description here

acf字段中没有数据的响应

但是,如果“ acf”字段中没有数据,则返回空的json数组,这不允许解析带有此错误的响应。

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 9555 path $[2].acf 

如果某些字段为空,如何处理这种类型的响应?

2 个答案:

答案 0 :(得分:0)

您需要使用Gson Serializatin和反序列化。关于对象/属性的注释可以为null。为此,您必须为您的回复设置pojo类。

您的代码将如下所示。

@Nullable       
@SerializeName ("acf")  
acfObjectType acf;

答案 1 :(得分:0)

JSON中的{}是一个空的pojo。

您可以编写一个执行此任务的委派转换器,默认情况下该行为不会添加到Retrofit中。

class NullOnEmptyConverterFactory implements Converter.Factory { @Override public Converter<ResponseBody, ?> responseBody(Type type, Annotation[] annotations, Retrofit retrofit) { final Converter<ResponseBody, ?> delegate = retrofit.nextResponseBodyConverter(this, type, annotations); return new Converter<>() { @Override public void convert(ResponseBody body) { if (body.contentLength() == 0) return null; return delegate.convert(body); } }; } }

Retrofit retrofit = new Retrofit.Builder()
.endpoint(..)
.addConverterFactory(new NullOnEmptyConverterFactory())
.addConverterFactory(GsonConverterFactory.create())
.build();