【问题标题】:Expected BEGIN_OBJECT but was BEGIN_ARRAY at path Moshi Json Data Exception预期 BEGIN_OBJECT 但在路径 Moshi Json 数据异常处是 BEGIN_ARRAY
【发布时间】:2020-03-23 12:26:20
【问题描述】:

我正在使用 Moshi 作为 Retrofit 的转换器,但对于一个特定的请求它不起作用并引发异常:

com.squareup.moshi.JsonDataException:预期为 BEGIN_OBJECT,但在路径 $.animaux 处为 BEGIN_ARRAY

这是 Json

 "nb_animaux": 1,
    “动画”:[
        {
            "code_iso": "768010103010004",
            “相片”: [],
            “espece”:{
                “身份证”:1,
                “fr”:“牛”,
                "zh": "牛"
            },
            “高度”:{
                “参数地理”:{
                    “县”:“奥蒂”,
                    “地区”:“萨凡”,
                    “公社”:“芒果”,
                    “支付”:{
                        "fr": "多哥",
                        "zh": "多哥"
                    },
                    “村庄”:“丰博罗”
                },
                “type_elevage”:{},
                “code_elevage”:“76801010301”
            },
            “性别”:“米”,
            "date_naissance": 1561932000,
            “类别”: {
                "fr": "金牛座",
                "zh": "公牛"
            },
            “业主”:{
                “身份证”:10,
                “全名”:“edem”,
                “地址”:“洛美”,
                “电话”:“98665478”
            }
        }
    ],
    "num_transport": "1/11/2019/TG",
    “日期运输”:1574784132,
    “特质”:假
}

我的模型课

@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 类使用构造函数,但出现错误。我也用了list&lt;Animaux&gt;,但是没用。

【问题讨论】:

  • “我也使用了列表,但它不起作用。”你的意思是var animaux: List&lt;Animaux&gt; 而不是Animaux?看起来它应该对我有用,或者如果它不起作用,那是另一个错误。
  • 如何在模型类中实现。你能告诉我怎么做吗,因为当我尝试我得到这个错误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

标签: android kotlin retrofit moshi


【解决方案1】:

您的 JSON 有一个 Animaux 列表,而不仅仅是一个列表。所以你需要var animaux: List[Animaux],而不仅仅是Animaux

你如何在模型类中实现它。你能告诉我怎么做吗,因为当我尝试时我得到这个错误错误: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。从技术上讲,您可以使其工作(请参阅Android room persistent library - how to insert class that has a List object field 的答案),但是您的数据绝对足够复杂,以至于我不会尝试对 JSON 和 Room 使用单个类;最终会得到一个非常un-normalized database

【讨论】:

  • 感谢您的回答。很有帮助。 @Alexey Romanov
猜你喜欢
  • 2020-12-10
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
相关资源
最近更新 更多