我正在尝试用Kotlin解析JSON。 由于我是Kotlin的初学者,这仍然有点困难。
这是我的Json示例:
"orders": {
"id" = 1;
"base_order": {
"id" = 1;
"price" = 10;
}
"picks": {
"0": {
"name": "Omelette du fromage"
}
"1": {
"name": "Baguette"
}
}
}
所以这就是我试图解析的原因:
@Parcel
class Orders {
var id = 0L
var baseOrder = BaseOrder()
var picks = ArrayList<Picks>()
fun loadFromJson(json: JsonObject) {
id = readLong(json, TAG_ID)
json.get(TAG_BASE_ORDER)?.let {
if (it.isJsonObject)
baseOrder.loadFromJson(it.asJsonObject)
}
}
companion object {
private const val TAG_ID = "id"
private const val TAG_BASE_ORDER = "base_order"
}
}
这是我的BaseOrder类:
@Parcel
class BaseOrder {
var id = 0L
var price = 0f
fun loadFromJson(json: JsonObject) {
id = readLong(json, TAG_ID)
price = readFloat(json, TAG_PRICE)
}
companion object {
private const val TAG_ID = "id"
private const val TAG_PRICE = "price"
}
}
最后我的Picks课程:
@Parcel
class Picks {
var name = ""
fun loadFromJson(json: JsonObject) {
name = readString(json, TAG_NAME)
}
companion object {
private const val TAG_NAME = "name"
}
}
我需要解析我的“选择”列表,理想情况下在我的Picks()的ArrayList中,但我不知道如何循环解析那种带有“0”,“1”,“2”的列表......索引键。
如果您认为我搜索不够,请至少给我这种json列表的名称,以便我可以做更好的搜索。
========================
编辑:
我终于找到了怎么做! 这是我的代码:
@Parcel
class Orders {
var id = 0L
var baseOrder = BaseOrder()
var picks = ArrayList<Picks>()
var pickItem = Picks() // This is a buffer
fun loadFromJson(json: JsonObject) {
id = readLong(json, TAG_ID)
json.get(TAG_BASE_ORDER)?.let {
if (it.isJsonObject)
baseOrder.loadFromJson(it.asJsonObject)
}
// Here I am going to start parsing it :
json.get(TAG_PICKS)?.let {
if (it.isJsonObject)
it.asJsonObject.entrySet().forEach() {
it.value.let {
if (it.isJsonObject)
pickItem.loadFromJson(it.asJsonObject)//I parse the json item in the buffer
picks.add(pickItem) // I add the buffer into the array at the right place
pickItem = Picks() // I re-init the buffer for next loops
}
}
}
}
companion object {
private const val TAG_ID = "id"
private const val TAG_BASE_ORDER = "base_order"
}
}
它有点脏,因为我正在使用缓冲区,我想我可以没有它,但语法就在这里。
作为Kotlin的初学者,我对任何建议持开放态度。
感谢那些试图帮助我的人:)