为JSON创建模型,其中键是android中的值
Posted
技术标签:
【中文标题】为JSON创建模型,其中键是android中的值【英文标题】:Creating model for JSON where key is a value in android 【发布时间】:2019-10-09 23:33:31 【问题描述】:我想从JSON
创建一个模型,其中键是一个值。 This 是描述的确切问题,但在 ios
中。我想在 android 中使用类似的解决方案。基本上我想在 Android 中有一个可解码的等价物。
我正在使用GSON
将JSON
解析为模型。到目前为止,我已经将 JSON 键(在链接中提到)与静态值进行了比较。
JSON:
"rows" :
[
"_id": "5cdc0ede5c3dcb04bdb3a972",
"emp_code": 187,
"log_id": 361711,
"punch_time": "2019-05-07T04:00:33.000Z",
"pin_type": 1,
"status": 4,
"__v": 0
,
"_id": "5cdc40de5c3dcb04bdb3a972",
"emp_code": 111,
"log_id": 361701,
"punch_time": "2019-05-07T04:00:35.000Z",
"pin_type": 101,
"status": 4,
"__v": 0
],
"pin_type_text":
"1": "In Fingerprint",
"4": "In Card",
"101": "Out Fingerprint",
"104": "Out Card"
每一行中pin_type的值是指pin_type_text中与其key对应的记录。
我正在使用 GSON 来创建模型,这里是模型类:
class MyModel
var length : Long = 0
var rows = ArrayList<Rows>()
var pin_type_text : String = ""
class PinTypeText
var 1 : String = ""
var 4 : String = ""
var 101 : String = ""
var 104 : String = ""
基本上,在类 PinTypeText 中定义的键是在共享的 JSON 中看到的在 Rows 模型中获得的键 'pin_type' 的值。因此,在这种情况下,“PinTypeText”中的键取决于“行”中定义的值。因此,我希望根据“Rows”模型中的“pin_type”值创建“PinTypeText”模型。
问题 :假设将来,'pin_type' 值 - 1, 4, 101, 104 在后端发生变化,我如何在不改变的情况下处理这种情况我的模型。根据这个模型结构,每次后端模型更改时我都需要更改我的模型类
【问题讨论】:
您可以做两件事:1.) 要求后端团队修复他们的 API 并提供具有非动态模式的 JSON 格式 2.) 手动解析并希望获得最好的结果 【参考方案1】:您可以将项目 PinTypeText 存储为 JsonElement 而不是自定义类, 所以你的响应模型会是这样的
public class Response
@SerializedName("rows")
@Expose
private List<Row> rows = null;
@SerializedName("pin_type_text")
@Expose
private JsonElement pinTypeText;
public List<Row> getRows()
return rows;
public void setRows(List<Row> rows)
this.rows = rows;
public JsonElement getPinTypeText()
return pinTypeText;
public void setPinTypeText(JsonElement pinTypeText)
this.pinTypeText = pinTypeText;
当您想检查类型时,您可以将其转换为 JsonObject 并获取键的值, 例子
pinTypeText= response.getPinTypeText().asJsonObject().get([your pin_type here]).toString()
【讨论】:
以上是关于为JSON创建模型,其中键是android中的值的主要内容,如果未能解决你的问题,请参考以下文章