Как преобразовать объект карты в массив объектов?

#android #kotlin

Вопрос:

У меня есть этот объект json

 {
"107": "First",
"125": "Second",
"130": "Third",
"141": "Fourth"
}
 

Я хочу преобразовать его в массив таких объектов, как этот

 [
  {
  "107":"First"
  },
  {
  "125":"Second"
  },
  {
  "130":"Third"
  },
  {
  "141":"Fourth"
  }
]
 

Чтобы было легко извлекать каждый объект в виде массива.

Как я могу сделать это с помощью kotlin?

Ответ №1:

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

 //your starting JSON string
        val startingJson = "{n"  
                ""107": "First",n"  
                ""125": "Second",n"  
                ""130": "Third",n"  
                ""141": "Fourth"n"  
                "}"

        //your starting JSON object
        val startingJsonObj = JSONObject(startingJson)

        //initialize the array
        val resultJsonArray = JSONArray()

        //loop through all the startingJsonObj keys to get the value
        for (key in startingJsonObj.keys()) {
            val resultObj = JSONObject()
            val value = startingJsonObj.opt(key)
            //put values in individual json object
            resultObj.put(key, value)
            //put json object into the final array
            resultJsonArray.put(resultObj)
        }

        Log.d("resultJsonArray", resultJsonArray.toString())
 

Комментарии:

1. Спасибо @Mayur, это работает, но как я могу преобразовать свой объект в startingJson как ваш?

2. @IslamAhmed Если у вас уже есть json object , то вам не нужно его конвертировать String . Просто начните с initialize the array шага и замените startingJsonObj его своим объектом JSON.

3. Я сделал это, потому что я просто скопировал его из вашего вопроса в виде строки.

Ответ №2:

Это может помочь вам с помощью Gson():

 data class MyData {
    var number: String,
    var name: String
}

//You can use jsonValue as String too
fun convertJsonToArray(jsonValue: JsonObject) {
    val myDataArray = Gson().fromJson(jsonValue, Array<MyData>::class.java)
//if you need it as list
    myDataArray.toList()
}