如何在 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 报错踩坑 (解决)