当前位置: 首页 > 知识库问答 >
问题:

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

松安民
2023-03-14

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

我使用的是dagger2(这部分100%正常工作)和rxJava(这部分总是调用onError方法)。

我的型号:

@Data
@NoArgsConstructor
public class GradeModel {

//I'm using lombok to generate getters and setters.

    @SerializedName("grade")
    @Expose
    private DecimalFormat grades;

    @SerializedName("grades")
    @Expose
    private GradeModel listGrades;

    private String matter;
    private int fault;

}

我的JSON:

grades: [

    {
        "class": "math"
        "grade": 4.5,
        "next_dates":[
            {
                "exam": "03/03/2017",
                "homework": "03/03/2017"
            }

        ]

    }

    {
        "class": "port"
        "grade": 8,
        "next_dates":[
            {
                "exam": "03/05/2017",
                "homework": "03/03/2017"
            }

        ]

    }

]

我的回应:

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();
}

错误:

com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在第1行接受格式错误的JSON第1列路径$

共有1个答案

易招
2023-03-14

1)等级:[不是有效JSON的一部分。如果要解析JSON数组,请删除等级:并留下[

那么,您的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仍然缺少一些逗号来分隔外部数组中的值。

 类似资料:
  • 如何使用RxJava和Kotlin中的改型创建api调用的泛型类? 我的JAVA实现是:: 首先添加Gradle依赖项:(更新到最新版本(如果可用)) //用于改装 实现“com.squareup.reverfit2:reverfit:2.3.0” 实现“com.squareup.reverfit2:converter-gson:2.3.0” //对于拦截器实现“com.squareup.okht

  • 首先,如果我对Rxjava的理解有错,请告诉我。 既然我们已经使用API查询使用referfit过滤了数据,那么对已经获得的数据进行操作有什么需要 为什么在RXJava中使用客户接口对象?因此,我们将其用于观察者或onNext()的位置。 Rxjava是否也有助于检索目的,或者它只是对已经获得的数据进行操作?

  • 我试图从JsonData将AdMob ID输入我的应用程序,以便将来可以更改它。 我的愿景: JSON文件将被上传到我的服务器,它的链接将在应用程序内。在json文件中找到的AdMob ID应在应用adUnitID中使用。到目前为止,我做了这个: 这是我的json文件: 问题是,它不仅不起作用,还会导致我的应用程序崩溃,并出现以下错误: 编辑:新日志: 我的片段完整代码: 任何帮助将不胜感激,谢谢

  • 问题内容: 我想使用Javascript 解析此内容。数据如下所示: 在线上的每个教程都教您如何使用Twitter解析JSON,但是我不太确定如何使用JSON解析。 我想在一个网站上进行设置,以查看NFL团队在一个有趣的项目中获得的分数,以及有关解析JSON的良好学习体验,因为我不太在乎Twitter的东西。 这可能吗?有什么好的入门教程吗?甚至一些起始代码? 问题答案: 一般来说,您可以使用 J

  • 在网络请求中使用和有什么好处。我见过许多使用的示例,但我想明白为什么。 示例情形: 为每个工作单元创建一个新线程。将使用线程池 但这种争论对应用程序有什么影响呢?还有哪些方面?

  • 我试图解决这个错误,但我做不到。 运行时得到的错误 09-03 07:45:34.436 602-6020/fyp.hotelreservationsystemver2 e/recyclerview:没有连接适配器;跳过布局09-03 07:45:34.465 602-6020/fyp.hotelreservationsystemver2 D/reservationmainactivity:[{“