Разбор JSON String с классами данных - PullRequest
0 голосов
/ 04 июля 2019

После запуска следующей строки кода, пытающейся передать строку JSON:

        var test = String(tempstore, Charset.forName("US-ASCII"))

        var gson = Gson()
        var testmodel = gson.fromJson(test, AuthoriseReq::class.java)

Строка JSON выглядит следующим образом:

{
  "transaction": {
    "id": "5f9a1239-0bdc-4ad6-84e0-f685cfa836f9",
    "timestamp": "2019-07-04T08:42:37.9830577+02:00"
  },
  "user": {
    "username": "trt",
    "passwordHash": "juju"
  },
  "terminal": {
    "terminalId": "juju",
    "site": {
      "id": "juju"
    }
  }
}   

Класс данных выглядит следующим образом, также следует отметить, что я включил пустые конструкторы в мои классы данных:

 data class AuthoriseReq(
            @SerializedName("transaction") val transaction: Transaction,
            @SerializedName("user") val user: User,
            @SerializedName("terminal") val terminal: Terminal)
    {
        constructor() : this(Transaction(), User(), Terminal())
    }


 data class Terminal(
            @SerializedName("terminalId") var terminalId: String,
            @SerializedName("site") var site: Site)
            {
             constructor() : this("",  Site())
            }

    data class Transaction(
            @SerializedName("id")   var id: String,
            @SerializedName("timestamp")   var timestamp:DateTime)
    {
        constructor(): this("", DateTime())
    }

data class Site(
        @SerializedName("id")   var id: String)
{
    constructor():this("")
}

data class User(
        @SerializedName("username")   var username: String ,
        @SerializedName("passwordHash")   var passwordHash : String )
{
    constructor(): this("","")
}

Тем не менее, я продолжаю получать следующую ошибку при попытке синтаксического анализа JSON:

 Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 74 path $.transaction.timestamp

1 Ответ

1 голос
/ 04 июля 2019

Заменить следующее

@SerializedName("timestamp")   var timestamp:DateTime)

с

@SerializedName("timestamp")   var timestamp : String )

Это должно устранить ошибку, поскольку "2019-07-04T08:42:37.9830577+02:00" является строкой в ​​предоставленной строке JSON.

...