Разбор строкового массива JSON в Pojo/Entity для базы данных android sqlite (комната)

Я пытаюсь реализовать реляционную базу данных, используя базу данных Room в Android. например, в json ниже, как я могу создать объект для жанры? или мне нужно разобрать его и вставить вручную без использования GSON?

{
    "imdb_code": "tt0419887",
    "title": "The Kite Runner",
    "title_english": "The Kite Runner",
    "title_long": "The Kite Runner (2007)",
    "slug": "the-kite-runner-2007",
    "year": 2007,
    "rating": 7.6,
    "runtime": 128,
    "genres": [
         "Drama",
         "Comedy"
    ]
}

мне нужно сериализовать класс как.

data class Movie(

@field:SerializedName("small_cover_image")
val smallCoverImage: String? = null,

@field:SerializedName("year")
val year: Int? = null,

@field:SerializedName("description_full")
val descriptionFull: String? = null,

@field:SerializedName("rating")
val rating: Double? = null,

@field:SerializedName("large_cover_image")
val largeCoverImage: String? = null,

@field:SerializedName("title_long")
val titleLong: String? = null,

@field:SerializedName("language")
val language: String? = null,

@field:SerializedName("yt_trailer_code")
val ytTrailerCode: String? = null,

@field:SerializedName("title")
val title: String? = null,

@field:SerializedName("mpa_rating")
val mpaRating: String? = null,

@field:SerializedName("genres")
val genres: List<String?>? = null
)

я нуждаюсь

 @field:SerializedName("genres")
    val genres: List<Genres?>? = null,

вместо @field:SerializedName("жанры") вал жанры: Список? = ноль,

Можете ли вы показать нам, что вы уже пытались сделать, чтобы оправдать свои ожидания? Не уверен, что понял ваше намерение, можете ли вы уточнить больше?

denis_lor 18.04.2019 10:05

Привет @denis_lor, я пытаюсь создать локальную базу данных, мне нужно создать pojo для веб-сервиса и базы данных, в вышеуказанных жанрах JSON я могу создать его только как список строк, но мне нужен свой собственный тип

Anu Martin 18.04.2019 10:13

вы можете разобрать его с помощью GSON или вручную, решать вам. В чем проблема? Вы не умеете парсить JSON?

Vladyslav Matviienko 18.04.2019 10:13

Возможный дубликат Как разобрать JSON в Android?

Vladyslav Matviienko 18.04.2019 10:14

@VladyslavMatviienko я так не думаю.

Anu Martin 18.04.2019 10:15

@АнуМартин почему?

Vladyslav Matviienko 18.04.2019 10:16

пожалуйста, проверьте вопрос, добавлен еще один фрагмент кода

Anu Martin 18.04.2019 10:20

Я получил ответ... Спасибо, ребята :)

Anu Martin 18.04.2019 10:23
0
8
219
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно создать модель для вашего JSON. Просто создайте модель вручную или перейдите на сайт, где вы можете автоматически создавать модели из JSON. JSONSchemaToPojo Если вы используете JSONSchematoPojo, вы получите что-то вроде этого:

package com.example;

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Movie {

@SerializedName("imdb_code")
@Expose
private String imdbCode;
@SerializedName("title")
@Expose
private String title;
@SerializedName("title_english")
@Expose
private String titleEnglish;
@SerializedName("title_long")
@Expose
private String titleLong;
@SerializedName("slug")
@Expose
private String slug;
@SerializedName("year")
@Expose
private Integer year;
@SerializedName("rating")
@Expose
private Double rating;
@SerializedName("runtime")
@Expose
private Integer runtime;
@SerializedName("genres")
@Expose
private List<String> genres = null;

public String getImdbCode() {
return imdbCode;
}

public void setImdbCode(String imdbCode) {
this.imdbCode = imdbCode;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getTitleEnglish() {
return titleEnglish;
}

public void setTitleEnglish(String titleEnglish) {
this.titleEnglish = titleEnglish;
}

public String getTitleLong() {
return titleLong;
}

public void setTitleLong(String titleLong) {
this.titleLong = titleLong;
}

public String getSlug() {
return slug;
}

public void setSlug(String slug) {
this.slug = slug;
}

public Integer getYear() {
return year;
}

public void setYear(Integer year) {
this.year = year;
}

public Double getRating() {
return rating;
}

public void setRating(Double rating) {
this.rating = rating;
}

public Integer getRuntime() {
return runtime;
}

public void setRuntime(Integer runtime) {
this.runtime = runtime;
}

public List<String> getGenres() {
return genres;
}

public void setGenres(List<String> genres) {
this.genres = genres;
}

}

Для ваших жанров вы можете просто создать List<String> жанры или у вас может быть представление ENUM для жанров. как List<GENRE> жанры. Если вы хотите использовать ENUM, вам нужно указать Converter для ypur Enum.

    @Database(entities = {
      MovieEntity.class
    }, version = 1)
    @TypeConverters(GenreConverter.class)
    public abstract class MovieDatabase extends RoomDatabase {
         public abstract MovieDao movieDao();
    }

public class GenreConverter {

    @TypeConverter
    public GENRE fromNumber(Integer value) {
        return GENRE.fromNumber(value);
    }

    @TypeConverter
    public Integer toNumber(GENRE type) {
        if (type == null) {
            return null;
        } else {
            return type.getNumberRepresentation();
        }
    }
}

Другие вопросы по теме