web-dev-qa-db-ja.com

KotlinはGSONを使用してjson配列をモデルリストに変換します

JSON配列をGroupModel配列に変換できません。以下は私が使用したJSONです:

[{
  "description":"My expense to others",
  "items":["aaa","bbb"],
  "name":"My Expense"
 },
 {
  "description":"My expense to others","
  items":["aaa","bbb"],
  "name":"My Expense"
 }]

そしてGroupModelクラスは:

class GroupModel {
    var name: String? = null
    var description: String? = null
    var items: MutableList<String>? = null

    constructor(name: String, description: String, items: MutableList<String>) {
        this.name = name
        this.description = description
        this.items = items
    }
}

次のコードを実行すると、Exceptionになります。

com.google.gson.JsonSyntaxException:Java.lang.IllegalStateException:BEGIN_OBJECTが必要ですが、行1列2パス$でBEGIN_ARRAYでした

コード:

var model = gson.fromJson<Array<GroupModel>>(inputString, GroupModel::class.Java)
11
Ayyanar

TypeTokenを使用して配列のジェネリック型をキャプチャする必要があります。これは、GroupModel::classだけではなく、GSONがターゲットとして認識する型である必要があります。これは実際にそれらのリストです。 TypeTokenを作成して、次のように使用できます。

Type groupListType = new TypeToken<ArrayList<GroupModel>>() {}.getType();
var model = gson.fromJson(inputString, groupListType);
7
Aravindraj
[{
  "description":"My expense to others",
  "items":["aaa","bbb"],
  "name":"My Expense"
 },
 {
  "description":"My expense to others","
  items":["aaa","bbb"],
  "name":"My Expense"
 }]

Kotlinコード

val gson = GsonBuilder().create()
val Model= gson.fromJson(body,Array<GroupModel>::class.Java).toList()

グラドル

implementation 'com.google.code.gson:gson:2.8.5'
11
BloodLoss

特定のクラスのJSON配列を解析するためにKotlinで実際にAndroidに取り組んでいる解決策を見つけました。@ Aravindrajの解決策は実際には機能しませんでした。

val fileData = "your_json_string"
val gson = GsonBuilder().create()
val packagesArray = gson.fromJson(fileData , Array<YourClass>::class.Java).toList()

したがって、基本的には、クラス(例ではYourClass)とJSON文字列を指定するだけで済みます。 GSONが残りを計算します。

5
xarlymg89