我想从JSON
创建一个模型,其中键是一个值。 This是描述的确切问题,但在iOS
中。我想要Android中的类似解决方案。基本上,我想在Android中拥有与Decodable相当的产品。
我正在使用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 中与其键对应的记录。
我正在使用 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中定义的键是在Rows模型中获得的键“ pin_type”的值,如JSON共享所示。因此,在这种情况下,“ PinTypeText”中的键取决于“行”中定义的值。因此,我希望针对“ Rows”模型中的“ pin_type”值创建“ PinTypeText”模型。
问题:假设将来,后端的“ pin_type”值- 1、4、101、104 发生了变化,我该如何处理这种情况而不进行更改我的模特。按照这种模型结构,每次后端模型更改时,我都需要更改模型类
答案 0 :(得分: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()