【发布时间】:2018-04-29 23:28:45
【问题描述】:
JSON
{
"data": [{
"id": "0bfe9470-4a57-11e8-8594-9fed6c4fe65b",
"type": 6,
"order": 12,
"data": {
"goto": "+",
"type": 6,
"order": 12,
"options": [{
"display": "P\u00e9ssimo"
}, {
"display": "Ruim"
}, {
"display": "Regular"
}, {
"display": "Bom"
}, {
"display": "\u00d3timo"
}],
"required": true,
"answer": []
}
}, {
"id": "0594b030-4a57-11e8-8c83-0d7c6461d799",
"type": 5,
"order": 10,
"data": {
"type": 5,
"order": 10,
"options": {
"left": {
"goto": "+",
"display": 0
},
"right": {
"goto": "+",
"display": 100
},
"center": {
"goto": "+",
"display": 50
}
},
"required": true,
"answer": []
}
}, {
"id": "00f8dea0-4a57-11e8-ab0b-7b5c52826681",
"type": 4,
"order": 9,
"data": {
"type": 4,
"order": 9,
"options": [{
"items": [{
"goto": "+",
"display": "Bom"
}, {
"goto": "+",
"display": "Regular"
}, {
"goto": "+",
"display": "Ruim"
}],
"display": "Thiago Silva"
}, {
"items": [{
"goto": "+",
"display": "Bom"
}, {
"goto": "+",
"display": "Regular"
}, {
"goto": "+",
"display": "Ruim"
}],
"display": "Thiago Silva"
}],
"required": true,
"answer": []
}
}]
}
代码 - PageReports 添加
public class PageReports implements Serializable{
@SerializedName("data")
@Expose
private List<Datum> data = null;
public List<Datum> getData() {
return data;
}
public void setData(List<Datum> data) {
this.data = data;
}
}
private void getReportPages(String id) {
if (subscription != null) {
subscription.unsubscribe();
}
subscription = RxUtil.appleHandlerStartFinish(
RestBuilder.api().getReportPage(RestParams.authHeaderAccept(getContext()), id),
() -> base.displayProcess(),
() -> base.dismissProcess())
.compose(RxUtil.applySchedulers())
.subscribe(
pageReports -> {
// LogUtil.e("JSON: ", SuApp.getInstance().gson().toJson(pageReports));
if (pageReports != null && pageReports.getData() != null && pageReports.getData().size() > 0) {
currentDataReport.setDataPages(pageReports.getData());
viewPager.setOffscreenPageLimit(pageReports.getData().size());
mPagerAdapter = new ReportPagerAdapter(getChildFragmentManager(), pageReports.getData());
viewPager.setAdapter(mPagerAdapter);
indicator.setViewPager(viewPager);
}
},
throwable -> throwable.printStackTrace()
);
}
public static Map<String,String> authHeaderAccept(Context context) {
Map<String, String> header = defaultHeader();
header.put("Authorization","Bearer " + Preference.getInstance(context).getToken());
return header;
}
错误
W/System.err: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 125 path $.data[0].data.options
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:39)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:122)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:217)
W/System.err: at retrofit2.OkHttpCall.execute(OkHttpCall.java:180)
at retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:40)
at retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:24)
at retrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:36)
at retrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:28)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(OperatorSubscribeOn.java:100)
at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:230)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 125 path $.data[0].data.options
W/System.err: at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213)
... 28 more
我正在尝试读取但总是出错,如果我在 JSON 中只有一个值,我可以进行搜索,但是当它有 3 时它没有。
好像 GSON () 类没有转换。在这种情况下可以做些什么以使错误不再发生?更改 JSON 还是代码中存在我尚未识别的错误?
【问题讨论】:
-
乍一看,您似乎在尝试将 JSON 直接加载到对象中,而 JSON 在 Java 对象没有数组的位置包含一个数组。您能否确定第 1 行第 125 列中的哪个字段并对照您的 Java 对象定义进行检查?
-
@Hugg 请发布您的
pageReports型号代码 -
@Kulebin 代码添加
-
这并不能真正告诉我们任何事情。正如 Gewure 指出的那样(我在错误中遗漏了),问题出在“选项”元素上:第一个 Datum 将 this 作为数组,第二个只是一个对象。这意味着我们需要查看 options 字段,这意味着您发布的仅包含 Datum 对象的 PageReports 也意味着没有 Datum 也没有任何意义,如果选项位于另一个包含的对象中,那么查看它会很有用也。但希望你现在已经足够了:听起来 JSON 中第一个 Datum 中的数组是错误的。需要同时接受array + obj吗?
-
@Rup.现在我明白错误了,谢谢。
标签: java android arrays json android-studio