我收到类似的错误
retrofit.RetrofitError:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在第1行第7列的路径接受格式错误的JSON $
我试过这个MalformedJsonException with Retrofit API? 1的1个答案,我正在使用翻新版1.8,该怎么办?
我的Java代码:
RetroHelper
public static RestAdapter getAdapter(Context ctx, String serverUrl) {
mContext=ctx;
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(StringConstants.BASE_CLASSES_URL+serverUrl)
.setLogLevel(RestAdapter.LogLevel.FULL).setLog(new RestAdapter.Log() {
@Override
public void log(String msg) {
Log.i("Retro Helper", msg);
}
})
.build();
JSON回应
{
"status": "Success",
"data": null,
"message": "Successfully get the slot lists",
"statusCode": 200
}
其他代码
public ServiceOperations getBaseClassService(Context ctx, String url) {
return new RetroHelper().getAdapter(ctx, url).create(ServiceOperations.class);
}
@GET("/schduleLists")
void getDoctorSchedule(@Query("doctorid") int id, Callback<JsonObject> callback);
mUtil.getBaseClassService(getActivity(), "").getDoctorSchedule(mUserId,new Callback<JsonObject>() {
@Override
public void success(JsonObject jsonObject, Response response) {
if (jsonObject.get(StringConstants.STATUS).getAsString().equalsIgnoreCase("Success")) {// this if condition is casued error!
mUtil.dismissDialog();
JsonArray jsonArray =jsonObject.get("data").getAsJsonArray();
最佳答案
我怀疑result1的末尾有一些字符,您无法在调试器中看到其后跟}字符。 result1和result2的长度是多少?我将注意到您引用的result2有169个字符。
当对象末尾有多余的非空格字符时,GSON会抛出该特定错误,并且它非常狭窄地定义了空格(如JSON规范所做的那样)-仅\ t,\ n,\ r和空格计数为空格。特别要注意,结尾的NUL(\ 0)字符不算作空格,并且会导致此错误。
如果您不容易弄清到底是什么导致多余的字符并消除它们,另一种选择是告诉GSON以宽大的模式进行解析:
Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(result1));
reader.setLenient(true);
Userinfo userinfo1 = gson.fromJson(reader, Userinfo.class);
关于java - 改造设置改造中的宽松误差:1.8.0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40082665/