如何在Kotlin中将ArrayList转换为JSONArray()

问题描述 投票:0回答:5

我在POJO类中有一个列表:

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

我想按JSONArray的形式传递此列表,并按以下形式传递:

JSONArray.put(list)

发送为:

“ userQuoteTravellers”:[“ []”]

但是我想发送为

“ userQuoteTravellers”:[]

如何在不使用任何循环的情况下在Kotlin中实现这一目标?

android json kotlin
5个回答
1
投票

如果我正确阅读了JSONArray构造函数,则可以像下面这样从任何Collection中构建它们(arrayList是Collection的子类):

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
}

0
投票

具有依赖项

添加到您的gradle:

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

将ArrayList转换为JsonArray

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

无依赖性

val jsonElements = JSONArray(itemsArrayList)

0
投票

您可以通过使用此方法来实现

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


  var gson = Gson()
  var jsonData = gson.toJson(PostPojo::class.java)

0
投票

尝试一下:val userQuote = response.getJSONArray("userQuoteTravellers")

然后像这样调用内部数据:

for (i in 0 until userQuote.length()) {
    val quotes = userQuote.getJSONObject(i)
    // then call the other data here
}

0
投票

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}]

© www.soinside.com 2019 - 2024. All rights reserved.