gson 如何在Kotlin中检查JsonArray的JSON对象中JSON元素出现的次数?

7dl7o3gd  于 2022-11-23  发布在  Kotlin
关注(0)|答案(2)|浏览(196)
[
  {
    "ReserveNumber": "RN001",
    "RecordType": "Bsdfs",
    "RequireType": "BBsdfdsdf"
  }, {
    "ReserveNumber": "RN002",
    "RecordType": "Breer",
    "RequireType": "BBertert"
  }, {
    "ReserveNumber": "RN001",
    "RecordType": "Brete",
    "RequireType": "BBdvdv"
  }, {
    "ReserveNumber": "RN003",
    "RecordType": "Berretert",
    "RequireType": "BBxcvvd"
  }
]

在上面的JSON数组中,每个JSON对象都包含ReserveNumber元素,这里如果出现多次,如何找到预订号的计数?这里ReserveNumberRN001出现了两次,如何使用Kotlin中的GSON库找到?

piwo6bdm

piwo6bdm1#

您可以通过几种方式来实现这一点,但最简单的一种是使用GSON本身

  • 1-构建表示JSON对象的类
  • 2-构建一个表示ReserveNumber和计数的Map〈String,Int〉
  • 3-循环访问对象并添加到计数中
hmtdttj4

hmtdttj42#

我不使用Kotlin,但在Kotlin中似乎很容易(甚至比使用Java 8 Streams API更简单):

fun group(input: JsonArray): JsonArray {
    return input.map { it.getAsJsonObject().getAsJsonPrimitive("ReserveNumber").asString }
            .groupingBy { it }
            .eachCount()
            .entries
            .fold(JsonArray(), { jsonArray, e ->
                val el = JsonObject()
                el.addProperty("key", e.key)
                el.addProperty("count", e.value)
                jsonArray.add(el)
                jsonArray
            })
}

上面的函数不是通用的,如果需要可以改进,但是现在对于JSON文档,它可以生成下面的JSON数组(类似于您提到的:How to get repeated objects in json array in javascript,但带有另一个输出JSON对象的属性名称):

[
    {"key": "RN001", "count": 2},
    {"key": "RN002", "count": 1},
    {"key": "RN003", "count": 1}
]

相关问题