Je ne parviens pas à convertir un tableau JSON en tableau GroupModel
. Voici le JSON que j'ai utilisé:
[{
"description":"My expense to others",
"items":["aaa","bbb"],
"name":"My Expense"
},
{
"description":"My expense to others","
items":["aaa","bbb"],
"name":"My Expense"
}]
et la classe GroupModel
est:
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
}
}
et essayer le code suivant donne un Exception
:
com.google.gson.JsonSyntaxException: Java.lang.IllegalStateException: BEGIN_OBJECT attendu mais BEGIN_ARRAY à la ligne 1 colonne 2 chemin $
Le code:
var model = gson.fromJson<Array<GroupModel>>(inputString, GroupModel::class.Java)
Vous devez utiliser un TypeToken
pour capturer le type générique du tableau, et vous devez que ce soit le type que GSON considère comme la cible, au lieu de simplement GroupModel::class
c'est vraiment une liste de ceux-ci. Vous pouvez créer un TypeToken
et l'utiliser comme suit:
Type groupListType = new TypeToken<ArrayList<GroupModel>>() {}.getType();
var model = gson.fromJson(inputString, groupListType);
[{
"description":"My expense to others",
"items":["aaa","bbb"],
"name":"My Expense"
},
{
"description":"My expense to others","
items":["aaa","bbb"],
"name":"My Expense"
}]
Code Kotlin
val gson = GsonBuilder().create()
val Model= gson.fromJson(body,Array<GroupModel>::class.Java).toList()
Gradle
implementation 'com.google.code.gson:gson:2.8.5'
J'ai trouvé une solution qui fonctionne réellement sur Android avec Kotlin pour analyser les tableaux JSON d'une classe donnée. La solution de @Aravindraj n'a pas vraiment fonctionné pour moi.
val fileData = "your_json_string"
val gson = GsonBuilder().create()
val packagesArray = gson.fromJson(fileData , Array<YourClass>::class.Java).toList()
Donc, en gros, il vous suffit de fournir une classe (YourClass
dans l'exemple) et la chaîne JSON. GSON trouvera le reste.