如何创建通用数据类型以访问 Json 响应的内部边界
Posted
技术标签:
【中文标题】如何创建通用数据类型以访问 Json 响应的内部边界【英文标题】:How to create a generic datatype to access a inner parameter of a Json Response 【发布时间】:2021-07-25 05:53:41 【问题描述】:如果您查看 ENERC_KCAL、FAT、FASAT、FAMS 下面的代码,它们都具有相同的 3 个参数 label、quantity 和 unit时间>。我想在我的 RecyclerAdapter 中设置标签和数量值以填充 recylerView。
"totalNutrients":
"ENERC_KCAL":
"label":"Energy",
"quantity":2493.0949190757847,
"unit":"kcal"
,
"FAT":
"label":"Fat",
"quantity":2.275,
"unit":"g"
,
"FASAT":
"label":"Saturated",
"quantity":0.0665,
"unit":"g"
,
"FAMS":
"label":"Monounsaturated",
"quantity":0.224,
"unit":"g"
但是,在我的数据类中,正在创建 ENERC_KCAL、FAT、FASAT、FAMS 类型的单个对象(我正在使用 Json 到 Kotlin 类插件),格式如下
data class ENERCKCAL(
@SerializedName("label")
val label: String?,
@SerializedName("quantity")
val quantity: Double?,
@SerializedName("unit")
val unit: String?
)
data class FAT(
@SerializedName("label")
val label: String?,
@SerializedName("quantity")
val quantity: Double?,
@SerializedName("unit")
val unit: String?
)
data class FASAT(
@SerializedName("label")
val label: String?,
@SerializedName("quantity")
val quantity: Double?,
@SerializedName("unit")
val unit: String?
)
有没有办法生成一个 GenericClass 来访问标签和数量值,或者我如何访问当前结构中的值?
【问题讨论】:
【参考方案1】:如果你想在 recyclerview 中显示你的数据,试试这个:
data class TotalNutrients(@SerializedName("ENERC_KCAL")val enerc:Nutrient, @SerializedName("FAT")val fat:Nutrient, @SerializedName("FASAT")val fasat:Nutrient, @SerializedName("FAMS")val fams:Nutrient)
data class Nutrient(@SerializedName("label")
val label: String?,
@SerializedName("quantity")
val quantity: Double?,
@SerializedName("unit")
val unit: String?
)
fun getArrayList():ArrayList<Nutrient>
return arrayListOf(enerc,fat,fasat,fams)
现在您可以使用 getArrayList() 来填充回收站视图
【讨论】:
这行得通。但是,在我的项目中,我有 45 个元素,例如 ENERC_KCAL 等。还有其他选择吗? 也许是这样的:***.com/questions/16295949/…【参考方案2】:如果您有很多相似的数据类,对于同样的问题有更好的解决方案。
data class Nutrient(@SerializedName("label")
val label: String?,
@SerializedName("quantity")
val quantity: Double?,
@SerializedName("unit")
val unit: String?
)
并在上层数据类中将其定义为
val valuesOfNutrients:Map<String, Nutrient>
然后您可以使用valuesOfNutrients.value
访问所有元素,而无需中间数据类
【讨论】:
以上是关于如何创建通用数据类型以访问 Json 响应的内部边界的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 retorfit2 创建用于解析 Json 的通用模型类?
如何在 ios 中解析这种类型的 JSON 响应? [复制]
如何在 NSDictionary 中访问本地 JSON 文件响应以在 UITableView 中显示?