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

我的 POJO 类中有一个列表:

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

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

JSONArray.put(list)

它被发送为:

“userQuoteTravellers”:[“[]”]

但我想发送它

“userQuoteTravellers”:[]

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

【问题讨论】:

标签: android json kotlin


【解决方案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
        }
        

        【讨论】:

          猜你喜欢
          • 2013-06-06
          • 2015-07-30
          • 2016-10-29
          • 1970-01-01
          • 1970-01-01
          • 2011-06-18
          • 2021-10-13
          • 1970-01-01
          相关资源
          最近更新 更多