Как преобразовать ArrayList в JSONArray () в Kotlin - PullRequest
0 голосов
/ 28 января 2020

У меня есть список в моем классе POJO:

"userQuoteTravellers": [ 
     {
        "id": 1354,
        "quoteId": 526,
        "travellerId": null
     }
]

Я хочу передать этот список, как он есть в JSONArray и передать его как:

JSONArray.put(list)

Это отправляется как:

"userQuoteTravellers": ["[]"]

Но я хочу отправить его как

"userQuoteTravellers ": []

Как мне добиться этого в Kotlin без использования l oop?

Ответы [ 5 ]

2 голосов
/ 28 января 2020

Если я правильно прочитал конструкторы JSONArray, вы можете построить их из любой коллекции (arrayList является подклассом коллекции) следующим образом:

val list = ArrayList<String?>()
list.add("jigar")
list.add("patel")
val jsArray = JSONArray(list)

Вы также можете использовать GSON для чтения json, см. Ниже пример:

import com.google.gson.annotations.Expose
import com.google.gson.annotations.SerializedName
class userQuoteTravellers {
    @SerializedName("id")
    @Expose
    var id: Int? = null
    @SerializedName("quoteId")
    @Expose
    var quoteId: Int? = null
    @SerializedName("travellerId")
    @Expose
    var travellerId: Any? = null
}
1 голос
/ 29 января 2020

put добавляет список как элемент к JSONArray. Это не то, что вы хотите. Вы хотите, чтобы ваш JSONArray представлял список.

JSONArray предлагает конструктор для этого:

val jsonArray = JSONArray(listOf(1, 2, 3))

Но есть гораздо более простой способ. Вам не нужно беспокоиться об отдельных свойствах. Просто передайте все POJO.

Допустим, у вас есть это:

class QuoteData(val id: Int, val quoteId: Int, travellerId: Int?)
class TravelerData(val userQuoteTravellers: List<QuoteData>)

val travelerData = TravelerData(listOf(QuoteData(1354, 546, null)))

Вам просто нужно передать travelerData конструктору JSONArray:

val travelerDataJson = JSONArray(travelerData)

и он будет представлен следующим образом:

"userQuoteTravellers": [{"id": 1354, "quoteId": 526, "travellerId": null}]

0 голосов
/ 28 января 2020

Вы можете достичь этого, используя

  implementation 'com.squareup.retrofit2:converter-gson:2.3.0'


  var gson = Gson()
  var jsonData = gson.toJson(PostPojo::class.java)
0 голосов
/ 28 января 2020

попробуйте это: val userQuote = response.getJSONArray("userQuoteTravellers")

, затем вызовите данные внутри так:

for (i in 0 until userQuote.length()) {
    val quotes = userQuote.getJSONObject(i)
    // then call the other data here
}
0 голосов
/ 28 января 2020

с зависимостями

Добавить в ваш gradle:

implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

Преобразовать ArrayList в JsonArray

val jsonElements = (JsonArray) new Gson().toJsonTree(itemsArrayList)

Без зависимостей

val jsonElements = JSONArray(itemsArrayList)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...