预期 BEGIN_OBJECT 但在路径 Moshi Json 处是 BEGIN_ARRAY 数据异常
Expected BEGIN_OBJECT but was BEGIN_ARRAY at path Moshi Json Data Exception
我正在使用 Moshi 作为 Retrofit 的转换器,但对于一个特定的请求它不起作用并抛出异常:
com.squareup.moshi.JsonDataException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at path $.animaux
这是Json
"nb_animaux": 1,
"animaux": [
{
"code_iso": "768010103010004",
"photos": [],
"espece": {
"id": 1,
"fr": "Bovin",
"en": "Bovine"
},
"elevage": {
"parametre_geographique": {
"prefecture": "Oti",
"region": "Savane",
"commune": "Mango",
"pays": {
"fr": "TOGO",
"en": "TOGO"
},
"village": "Fonboro"
},
"type_elevage": {},
"code_elevage": "76801010301"
},
"sexe": "m",
"date_naissance": 1561932000,
"category": {
"fr": "Taureau",
"en": "Bull"
},
"proprietaire": {
"id": 10,
"fullname": "edem",
"adresse": "lome",
"telephone": "98665478"
}
}
],
"num_transport": "1/11/2019/TG",
"date_transport": 1574784132,
"traite": false
}
我的模型class
@Entity
data class Animal(
@field:PrimaryKey
var id: Long,
@ColumnInfo(name = "nb_animaux")
@Json(name = "nb_animaux")
var nbAnimaux : Int,
@Embedded
@get:Json(name = "animaux")
var animaux : Animaux,
@ColumnInfo(name = "num_transport")
@Json(name = "num_transport")
var numeroTransport : String,
@ColumnInfo(name = "date_transport")
@Json(name = "date_transport")
var dateTransport : Long,
var traite: Boolean
)
@JsonClass(generateAdapter = true)
data class Animaux(
@ColumnInfo(name = "animaux_id")
var id : Long,
@ColumnInfo(name = "code_iso")
@Json(name = "code_iso")
var codeIso : Long,
@Embedded
var espece : Espece,
@Embedded
var elevage : Elevage,
var sexe : String,
@ColumnInfo(name = "date_naisance")
@Json(name = "date_naisance")
var dateNaissance : Long,
@ColumnInfo(name = "race_pere")
@Json(name = "race_pere")
var racePere: String,
@ColumnInfo(name = "race_mere")
@Json(name = "race_mere")
var raceMere: String,
@Embedded
var category: Category,
@Embedded
var proprietaire: Proprietaire
)
/*{
constructor() : this(0, 0, Espece(0,"",""), Elevage(0, ParametreGeographique("","","",
Country("",""),""
),0), "", 0, "", "", Category(0,"",""),Proprietaire
(0,"","","",""))
}
*/
data class Espece(
@ColumnInfo(name = "id_espece")
@Json(name = "id_espece")
var id: Long,
var fr : String,
var en : String
)
data class Elevage(
@ColumnInfo(name = "id_elevage")
@Json(name = "id_elevage")
var id: Long,
@Embedded
var parametregeographique: ParametreGeographique,
@ColumnInfo(name = "code_elevage")
@Json(name = "code_elevage")
var codeElevage : Long
)
data class ParametreGeographique(
var prefecture : String,
var region : String,
var commune : String,
@Embedded
var pays : Country,
var village : String
)
data class Country(
@ColumnInfo(name = "fr_pays")
@Json(name = "fr_pays")
var fr : String,
@ColumnInfo(name = "en_pays")
@Json(name = "en_pays")
var en : String
)
data class Category (
@ColumnInfo(name = "id_category")
var id: Long,
@ColumnInfo(name = "fr_category")
var fr : String,
@ColumnInfo(name = "en_category")
var en : String
)
data class Proprietaire(
@ColumnInfo(name = "id_proprietaire")
var id: Long,
var fullname : String,
var telephone : String,
@ColumnInfo(name = "telephone_second")
var telephoneSecond : String,
@ColumnInfo(name = "photo_profile")
var photoProfil : String
)
改装电话
@GET("marche-betail/transport/{id}")
fun commandesDetailFromServer(@Path("id") id: Long?): Observable<Animal>
我该如何处理这个错误。我尝试为 Animaux
class 使用构造函数,但出现错误。我也用过 list<Animaux>
但没用。
您的 JSON 有一个 Animaux
的列表,而不只是一个。所以你需要 var animaux: List[Animaux]
,而不仅仅是 Animaux
。
How do you implement it in the model class. Could you show how to do it becuase when I try I get this error error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.List
房间doesn't support such fields directly. You could technically make it work (see answers to ), but your data is definitely complex enough that I wouldn't try to use a single class both for JSON and for Room; it'll end up with a very un-normalized database。
我正在使用 Moshi 作为 Retrofit 的转换器,但对于一个特定的请求它不起作用并抛出异常:
com.squareup.moshi.JsonDataException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at path $.animaux
这是Json
"nb_animaux": 1, "animaux": [ { "code_iso": "768010103010004", "photos": [], "espece": { "id": 1, "fr": "Bovin", "en": "Bovine" }, "elevage": { "parametre_geographique": { "prefecture": "Oti", "region": "Savane", "commune": "Mango", "pays": { "fr": "TOGO", "en": "TOGO" }, "village": "Fonboro" }, "type_elevage": {}, "code_elevage": "76801010301" }, "sexe": "m", "date_naissance": 1561932000, "category": { "fr": "Taureau", "en": "Bull" }, "proprietaire": { "id": 10, "fullname": "edem", "adresse": "lome", "telephone": "98665478" } } ], "num_transport": "1/11/2019/TG", "date_transport": 1574784132, "traite": false }
我的模型class
@Entity
data class Animal(
@field:PrimaryKey
var id: Long,
@ColumnInfo(name = "nb_animaux")
@Json(name = "nb_animaux")
var nbAnimaux : Int,
@Embedded
@get:Json(name = "animaux")
var animaux : Animaux,
@ColumnInfo(name = "num_transport")
@Json(name = "num_transport")
var numeroTransport : String,
@ColumnInfo(name = "date_transport")
@Json(name = "date_transport")
var dateTransport : Long,
var traite: Boolean
)
@JsonClass(generateAdapter = true)
data class Animaux(
@ColumnInfo(name = "animaux_id")
var id : Long,
@ColumnInfo(name = "code_iso")
@Json(name = "code_iso")
var codeIso : Long,
@Embedded
var espece : Espece,
@Embedded
var elevage : Elevage,
var sexe : String,
@ColumnInfo(name = "date_naisance")
@Json(name = "date_naisance")
var dateNaissance : Long,
@ColumnInfo(name = "race_pere")
@Json(name = "race_pere")
var racePere: String,
@ColumnInfo(name = "race_mere")
@Json(name = "race_mere")
var raceMere: String,
@Embedded
var category: Category,
@Embedded
var proprietaire: Proprietaire
)
/*{
constructor() : this(0, 0, Espece(0,"",""), Elevage(0, ParametreGeographique("","","",
Country("",""),""
),0), "", 0, "", "", Category(0,"",""),Proprietaire
(0,"","","",""))
}
*/
data class Espece(
@ColumnInfo(name = "id_espece")
@Json(name = "id_espece")
var id: Long,
var fr : String,
var en : String
)
data class Elevage(
@ColumnInfo(name = "id_elevage")
@Json(name = "id_elevage")
var id: Long,
@Embedded
var parametregeographique: ParametreGeographique,
@ColumnInfo(name = "code_elevage")
@Json(name = "code_elevage")
var codeElevage : Long
)
data class ParametreGeographique(
var prefecture : String,
var region : String,
var commune : String,
@Embedded
var pays : Country,
var village : String
)
data class Country(
@ColumnInfo(name = "fr_pays")
@Json(name = "fr_pays")
var fr : String,
@ColumnInfo(name = "en_pays")
@Json(name = "en_pays")
var en : String
)
data class Category (
@ColumnInfo(name = "id_category")
var id: Long,
@ColumnInfo(name = "fr_category")
var fr : String,
@ColumnInfo(name = "en_category")
var en : String
)
data class Proprietaire(
@ColumnInfo(name = "id_proprietaire")
var id: Long,
var fullname : String,
var telephone : String,
@ColumnInfo(name = "telephone_second")
var telephoneSecond : String,
@ColumnInfo(name = "photo_profile")
var photoProfil : String
)
改装电话
@GET("marche-betail/transport/{id}")
fun commandesDetailFromServer(@Path("id") id: Long?): Observable<Animal>
我该如何处理这个错误。我尝试为 Animaux
class 使用构造函数,但出现错误。我也用过 list<Animaux>
但没用。
您的 JSON 有一个 Animaux
的列表,而不只是一个。所以你需要 var animaux: List[Animaux]
,而不仅仅是 Animaux
。
How do you implement it in the model class. Could you show how to do it becuase when I try I get this error error:
Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.List
房间doesn't support such fields directly. You could technically make it work (see answers to