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

Posted

技术标签:

【中文标题】如何在 Kotlin 中将 ArrayList 转换为 JSONArray()【英文标题】:How to convert ArrayList to JSONArray() in Kotlin 【发布时间】:2020-05-13 12:06:01 【问题描述】:

我的 POJO 类中有一个列表:

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

我想传递这个列表,就像它在 JSONArray 中一样,并将它传递为:

JSONArray.put(list)

它被发送为:

“userQuoteTravellers”:[“[]”]

但我想发送它

“userQuoteTravellers”:[]

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

【问题讨论】:

看看discuss.kotlinlang.org/t/… 这能回答你的问题吗? convert ArrayList<MyCustomClass> to JSONArray 我不想使用任何循环@animusmind 【参考方案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

【讨论】:

【参考方案2】:

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”:[ “身份证”:1354, "quoteId": 526, “旅行者 ID”:空 ]

【讨论】:

【参考方案3】:

有依赖关系

添加到你的 gradle:

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

将 ArrayList 转换为 JsonArray

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

没有依赖关系

val jsonElements = JSONArray(itemsArrayList)

【讨论】:

这是否使用与原始问题相同的 JSON 库? 是的,但是如果您不想使用库而不是默认值是 val jsArray = JSONArray(mylist)。只需将您的通用数组列表传递给 JSONArray 参数 这里 JSONArray 仅来自 Collection。无需为此添加库 @KalpeshRupani 不,它不会解决我的问题,因为我已经尝试过同样的方法。再次阅读问题。【参考方案4】:

你可以通过使用这个来实现这个

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


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

【讨论】:

【参考方案5】:

试试这个: val userQuote = response.getJSONArray("userQuoteTravellers")

然后像这样调用里面的数据:

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

【讨论】:

以上是关于如何在 Kotlin 中将 ArrayList 转换为 JSONArray()的主要内容,如果未能解决你的问题,请参考以下文章

在 Kotlin 中将 ArrayList 转换为字符串的最佳方法

如何在 Kotlin 中将 listView 转换为 RecyclerView

来自json的Arraylist并在Kotlin的recyclerView中使用它

Android Kotlin opencv MatOfPoint 转 MatOfPoint2f 报错踩坑 (解决)

Android Kotlin opencv MatOfPoint 转 MatOfPoint2f 报错踩坑 (解决)

如何在处理程序中将 java 转换为 kotlin