使用RxJava和改进的格式错误的JSON
我想从JSON获取一些数据,但gson给出了一个错误。我想知道如何解决这个问题 我使用的是Dagger2,这部分是100%正常工作的,RxJava2这部分总是调用onError方法 我的模型: 我的JSON: 我的答复是: 我的服务: 错误: com.google.gson.stream.MalformedJSON异常:使用 JsonReader.setLenienttrue接受第1行列中格式错误的JSON 1路径$ 1 grades:[不是有效JSON的一部分。如果要解析JSON数组,请删除grades:[并保留] 那么,你的Gson模型是错误的。你有分数和等级,而不是等级,下一个日期和班级 这也是两个对象使用RxJava和改进的格式错误的JSON,java,android,gson,rx-java,rx-android,Java,Android,Gson,Rx Java,Rx Android,我想从JSON获取一些数据,但gson给出了一个错误。我想知道如何解决这个问题 我使用的是Dagger2,这部分是100%正常工作的,RxJava2这部分总是调用onError方法 我的模型: 我的JSON: 我的答复是: 我的服务: 错误: com.google.gson.stream.MalformedJSON异常:使用 JsonReader.setLenienttrue接受第1行列中格式错误的JSON 1路径$ 1 grades:[不是有效JSON的一部分。如果要解析JSON数组,请删除g
{ // One Object here
"class": "math",
"grade": 4.5,
"next_dates":[
{ // Second object here
"exam": "03/03/2017",
"homework": "03/03/2017"
}
]
}
因此,您的Java类类似于
public class GradeDate {
private String exam, homework;
}
public class GradeModel {
private String class;
private Double grade;
private List<GradeDate> nextDates;
}
然后,您的JSON仍然缺少一些逗号来分隔外部数组中的值。删除等级:从JSON中删除等级是正确的,没有从JSON中删除等级我可以做些什么?为什么您不能编辑等级_JSON.JSON?它不是正确的JSON。您缺少一些逗号,JSON总是为任何值引用键。因为不是我的文件,我复制了那个json并把它放在网上,没有分数:仍然是相同的onError方法,没有任何改变。
public class GradeResponse {
@Inject
Retrofit retrofit;
@Inject
MainPresenter mainPresenter;
public void getGradeRx() {
MyApplication.getMainComponent().injectIntoGradeResponse(this);// informando ao dagger sobre o uso de um component e a necessidade de injetar dependência
Subscription getGrade = retrofit
.create(GradeService.class)
.getGrade()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(model -> {
// transform model
return model.getListGrades();
})
.subscribe(new Observer<GradeModel>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.i(TAG, "saporra vai me matar ainda");
}
@Override
public void onNext(GradeModel grades) {
Log.i(TAG, "caralhoooooo " + grades.getGrades());
//mainPresenter.setListGrades(grades);
}
});
}
}
@Module
public class RetrofitModule {
@Provides
@PerActivity
Gson provideGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
//gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
return gsonBuilder.create();
}
@Provides
@PerActivity
public OkHttpClient provideHttpClient() {
return new OkHttpClient().newBuilder().build();
}
@Provides
@PerActivity
public Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient) {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(BASE_URL)
.client(okHttpClient)
//converts Retrofit response into Observable
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
return retrofit;
}
}
public interface GradeService {
@GET("grades_json.json")
Observable<GradeModel> getGrade();
}
{ // One Object here
"class": "math",
"grade": 4.5,
"next_dates":[
{ // Second object here
"exam": "03/03/2017",
"homework": "03/03/2017"
}
]
}
public class GradeDate {
private String exam, homework;
}
public class GradeModel {
private String class;
private Double grade;
private List<GradeDate> nextDates;
}