Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 克拉克森:本该有个名字,但却被留下了_Json_Kotlin_Klaxon - Fatal编程技术网

Json 克拉克森:本该有个名字,但却被留下了

Json 克拉克森:本该有个名字,但却被留下了,json,kotlin,klaxon,Json,Kotlin,Klaxon,如何使用Klaxon读取“复杂”的json? 我正在尝试使用klaxon的流api 我使用的是beginObject方法。如果我使用示例中给出的json,一切都很好 val objectString = """{ "name" : "Joe", "age" : 23, "flag" : true, "array" : [1, 3], "obj1" : { "a" : 1, "b" : 2 } }""" 但是,如果我像下面的例子那样尝试解析带有嵌套对象的json,我会得到以下错误:“需

如何使用Klaxon读取“复杂”的json? 我正在尝试使用klaxon的流api

我使用的是beginObject方法。如果我使用示例中给出的json,一切都很好

val objectString = """{
 "name" : "Joe",
 "age" : 23,
 "flag" : true,
 "array" : [1, 3],
 "obj1" : { "a" : 1, "b" : 2 }
}"""
但是,如果我像下面的例子那样尝试解析带有嵌套对象的json,我会得到以下错误:“需要一个名称,但得到左括号”

我在github回购协议中没有看到任何报告的问题,所以我想知道是否有办法让它正常工作


干杯

好的,我检查了源代码,似乎
nextObject()
假设您处理的是一个简单的键值对象,其中值不是对象

无论如何,还有另一种方法可以解析指定格式的JSON,如下所示:

val objectString = """{
         "name" : "Joe",
         "age" : 23,
         "flag" : true,
         "array" : [1, 2, 3],
         "obj1" : { "hello": {"a" : 1, "b" : 2 } }
    }"""

class ABObj(val a: Int, val b: Int)

class HelloObj(val hello: ABObj)

class Obj(val name: String, val age: Int, val flag: Boolean, val array: List<Any>, val obj1: HelloObj)


val r = Klaxon().parse<Obj>(objectString)

// r is your parsed object
print(r!!.name) // prints Joe
print(r!!.array) // prints [1, 2, 3]
HelloObj
表示此JSON:

{"a": 1, "b": 2}
{"hello": {"a": 1, "b": 2}}
最后,
Obj
表示顶级对象


希望这有帮助。

使用流式API,您自己负责解析对象和数组,因此当您遇到名称“obj1”时,您需要启动一个新的
beginObject(){…}
并在那里解析该对象

您链接的文档正是这样做的:


while(reader.hasNext()){
val readName=reader.nextName()
何时(readName){
“name”->name=reader.nextString()
“age”->age=reader.nextInt()
“flag”->flag=reader.nextBoolean()
“array”->array=reader.nextArray()
“obj1”->obj1=reader.nextObject()

您介意在尝试解析JSON的地方提供代码吗?当然,为了方便起见,这里还有一个repo。我试图只使用流式api,但似乎必须这样,谢谢@TGOThat,它将是一个嵌套的
beginObject()
?如果是,我是否必须启动一个新的JsonReader?我面临同样的问题,您能否根据原始问题中的示例演示如何启动?
{"hello": {"a": 1, "b": 2}}