【问题标题】:Creating model for JSON where key is a value in android为JSON创建模型,其中键是android中的值
【发布时间】:2019-10-09 23:33:31
【问题描述】:

我想从JSON 创建一个模型,其中键是一个值。 This 是描述的确切问题,但在 iOS 中。我想在 Android 中使用类似的解决方案。基本上我想在 Android 中有一个可解码的等价物。

我正在使用GSONJSON 解析为模型。到目前为止,我已经将 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.) 手动解析并希望获得最好的结果

标签: java android json kotlin gson


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2012-10-27
    • 2021-12-13
    相关资源
    最近更新 更多