Klaxon解析嵌套数组

时间:2018-04-15 10:54:42

标签: json intellij-idea kotlin klaxon

我试图用Klaxon解析this file,一般来说一切顺利,除了我完全没有成功解析特征的子阵列/ [Number] / properties /

所以我的想法是得到原始的属性串并用Klaxon单独解析它,尽管我也没有成功。除此之外,我还采取了许多其他方法。

到目前为止我的代码:

  class Haltestelle(val type: String?, val totalFeatures: Int?, val features: Array<Any>?)

fun main(args: Array<String>) { // Main-Routine


    val haltejsonurl = URL("http://online-service.kvb-koeln.de/geoserver/OPENDATA/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=ODENDATA%3Ahaltestellenbereiche&outputFormat=application/json")
    val haltestringurl = haltejsonurl.readText()


    val halteklx = Klaxon().parse<Haltestelle>(haltestringurl)


    println(halteklx?.type)
    println(halteklx?.totalFeatures)
    println(halteklx?.features)

    halteklx?.features!!.forEach {
        println(it) 
    }

我知道我正在调用Any的数组,所以Output只是每次打印java.lang.Object@blabla。但是,使用Array failes也是。

真的花了几个小时,你会怎么做呢?

关心新手

1 个答案:

答案 0 :(得分:0)

这就是我在科特林做类似事情的方式。您可以将响应解析为Klaxon JsonObject,然后访问“功能”元素以将所有数组对象解析为JsonObjects的JsonArray。在您的示例中,可以对其进行迭代并使用parseFromJsonObject 进行强制转换:

import com.beust.klaxon.JsonArray
import com.beust.klaxon.JsonObject
import com.beust.klaxon.Parser
import com.github.aivancioglo.resttest.*

val response : Response = RestTest.get("http://anyurlwithJSONresponse")
val myParser = Parser()
val data : JsonObject = myParser.parse(response.getBody()) as JsonObject
val allFeatures : JsonArray<JsonObject>? = response["features"] as JsonArray<JsonObject>?

for((index,obj) in allFeatures.withIndex()) {
    println("Loop Iteration $index on each object")
    val yourObj = Klaxon().parseFromJsonObject<Haltestelle>(obj)
}