3

このファイルを Klaxon で解析しようとしていますが、通常はうまくいっていますが、features/[Number]/properties/ の部分配列の解析にまったく成功していません。

したがって、私の考えは、プロパティの生の文字列を取得し、それをクラクソンで個別に解析することですが、それにも成功しません。それとは別に、私は他の多くのアプローチも取りました。

これまでの私のコード:

  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) 
    }

私は機能を任意の配列として呼び出していることを認識しているため、出力は毎回 java.lang.Object@blabla を出力しているだけです。ただし、Array の使用も失敗します。

本当にこれに何時間も費やしますが、どうやってこれを続けますか?

新人よろしく

4

1 に答える 1

3

これが、Kotlinで同様のことをした方法です。応答を Klaxon JsonObject として解析し、「features」要素にアクセスして、すべての配列オブジェクトを解析して JsonObjects の JsonArray にすることができます。あなたの例では、これを反復して parseFromJsonObject<Haltestelle> でキャストできます。

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)
}
于 2018-06-26T01:00:20.763 に答える