我在POJO类中有一个列表:
"userQuoteTravellers": [
{
"id": 1354,
"quoteId": 526,
"travellerId": null
}
]
我想按JSONArray
的形式传递此列表,并按以下形式传递:
JSONArray.put(list)
发送为:
“ userQuoteTravellers”:[“ []”]
但是我想发送为
“ userQuoteTravellers”:[]
如何在不使用任何循环的情况下在Kotlin中实现这一目标?
如果我正确阅读了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
}
具有依赖项
添加到您的gradle:
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
将ArrayList转换为JsonArray
val jsonElements = (JsonArray) new Gson().toJsonTree(itemsArrayList)
无依赖性
val jsonElements = JSONArray(itemsArrayList)
您可以通过使用此方法来实现
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
var gson = Gson()
var jsonData = gson.toJson(PostPojo::class.java)
尝试一下:val userQuote = response.getJSONArray("userQuoteTravellers")
然后像这样调用内部数据:
for (i in 0 until userQuote.length()) {
val quotes = userQuote.getJSONObject(i)
// then call the other data here
}
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}]