如何解析Kotlin中的JSON索引词典

时间:2018-01-17 10:32:57

标签: android json list kotlin

我正在尝试用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的初学者,我对任何建议持开放态度。

感谢那些试图帮助我的人:)

0 个答案:

没有答案