使用RxJava和改进的格式错误的JSON

使用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

我想从JSON获取一些数据,但gson给出了一个错误。我想知道如何解决这个问题

我使用的是Dagger2,这部分是100%正常工作的,RxJava2这部分总是调用onError方法

我的模型:

我的JSON:

我的答复是:

我的服务:

错误:

com.google.gson.stream.MalformedJSON异常:使用 JsonReader.setLenienttrue接受第1行列中格式错误的JSON 1路径$

1 grades:[不是有效JSON的一部分。如果要解析JSON数组,请删除grades:[并保留]

那么,你的Gson模型是错误的。你有分数和等级,而不是等级,下一个日期和班级

这也是两个对象

{                    // 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;
}