Java 如何将JSON转换为POJO Kotlin
我有一个包含产品类别的JSON文件。我正在尝试将生成的JSON文件转换为Kotlin类,以便将来可以在RecyclerView中显示生成的数据。我创建了必要的POJO类,在日志中我看到我从服务器获得了正确的数据。但当我试图从片段中记录数据时,我发现我的数据是空的。我怎样才能解决这个问题? JSON示例:Java 如何将JSON转换为POJO Kotlin,java,android,json,kotlin,Java,Android,Json,Kotlin,我有一个包含产品类别的JSON文件。我正在尝试将生成的JSON文件转换为Kotlin类,以便将来可以在RecyclerView中显示生成的数据。我创建了必要的POJO类,在日志中我看到我从服务器获得了正确的数据。但当我试图从片段中记录数据时,我发现我的数据是空的。我怎样才能解决这个问题? JSON示例: { "beauty_health": [ { "id": 1, "brand": "Ka
{
"beauty_health": [
{
"id": 1,
"brand": "Kaya Youth",
"category": "Beauty & Health",
"name": "Hydro Replenish Face Wash",
"description": "Hydro Replenish Face Wash, With Aloe Vera",
"price": 42,
"icon": ""
},
{
"id": 2,
"brand": "Kaya Youth",
"category": "Beauty & Health",
"name": "Oxy-Infusion Face Wash",
"description": "Kaya Youth Oxy-Infusion Face Wash,100",
"price": 18,
"icon": ""
}],
"electronics": [
{
"id": 1,
"brand": "OnePlus",
"category": "Electronics",
"name": "OnePlus 8",
"description": "OnePlus 8T 64GB",
"price": 250,
"icon": ""
},],
POJO类示例:
//产品列表类
data class ProductList(
@SerializedName("beauty_health")
var beautyHealth: List<BeautyHealth>,
@SerializedName("electronics")
val electronics: List<Electronic>,
@SerializedName("fashion")
val fashion: List<Fashion>,
@SerializedName("image_slider")
val imageSlider: List<ImageSlider>,
@SerializedName("popular")
val popular: List<Popular>,
@SerializedName("sports")
val sports: List<Sport>) : Serializable
我的存储库:
api.onFetchAllProducts().enqueue(object : Callback<ProductList> {
override fun onFailure(call: Call<ProductList>, t: Throwable) {
}
override fun onResponse(call: Call<ProductList>, response: Response<ProductList>) {
mutableLiveData.postValue(response.body())
}
})
return mutableLiveData
我的日志:
D/HomeFragment: onCreateView: null
如果使用Kotlin的
数据类
作为您的Gson
模型,必须为所有属性提供默认值
在Java中,所有对象都有默认的空值。如果选择使用Kotlin数据类作为具有非null属性的模型,并且JSON响应中缺少一个字段,则整个序列化将失败
例如,尝试改变这一点:
data class BeautyHealth(
@SerializedName("brand")
val brand: String,
@SerializedName("category")
val category: String,
@SerializedName("description")
val description: String,
@SerializedName("icon")
val icon: String,
@SerializedName("id")
val id: Int,
@SerializedName("name")
var name: String,
@SerializedName("price")
val price: Int) : Serializable
致:
你的
onFailure
是空的,你怎么知道调用是成功的呢?我在OkHttp日志中看到Intersportor必须使用它将gson转换为模型类gson()。从JSON(你的gson,POJO::class;java)这不是我的问题。在OnFailure中,我得到一个错误,提示->OnFailure:java.lang.IllegalStateException:应该是BEGIN\u对象,但在第1行第2列路径$处是BEGIN\u数组。但我不想得到一份清单。我想从JSON中获取类别并将其添加到产品列表中。但我不知道怎么做
mHomeViewModel.onGetProductsList().observe(viewLifecycleOwner, Observer { products ->
Log.d(TAG, "onCreateView: $products")
})
D/HomeFragment: onCreateView: null
data class BeautyHealth(
@SerializedName("brand")
val brand: String,
@SerializedName("category")
val category: String,
@SerializedName("description")
val description: String,
@SerializedName("icon")
val icon: String,
@SerializedName("id")
val id: Int,
@SerializedName("name")
var name: String,
@SerializedName("price")
val price: Int) : Serializable
data class BeautyHealth(
@SerializedName("brand")
val brand: String = "",
@SerializedName("category")
val category: String = "",
@SerializedName("description")
val description: String = "",
@SerializedName("icon")
val icon: String = "",
@SerializedName("id")
val id: Int = 0,
@SerializedName("name")
var name: String = "",
@SerializedName("price")
val price: Int = 0) : Serializable