2014-09-29 60 views
2

我想知道是否有一个解析器或一个简单的方法来迭代通过JSON对象,而无需知道在Scala提前JSON的键/架构。我看了一些像json4s这样的库,但它似乎仍然需要在提取字段之前提前了解模式。我只是想遍历每个字段,提取等领域,并打印出它们的值是这样的:Scala解析Json不知道架构

json.foreachkey(key -> println(key +":" + json.get(key)) 

回答

0

如果JSON你的意思是任何JValue,然后json4s似乎具有此功能的开箱:

scala> import org.json4s.JsonDSL._ 
import org.json4s.JsonDSL._ 

scala> import org.json4s.native.JsonMethods._ 
import org.json4s.native.JsonMethods._ 

scala> val json = parse(""" { "numbers" : [1, 2, 3, 4] } """) 
json: org.json4s.JValue = JObject(List((numbers,JArray(List(JInt(1), JInt(2), JInt(3), JInt(4)))))) 

scala> compact(render(json)) 
res1: String = {"numbers":[1,2,3,4]} 
2

Play Json你最初会解析你的json到JsValue;然后你可以模式匹配这个以确定它是否是一个JsObject(请注意,您可以使用fieldsvalue找到这个领域的),一个JsArray(再次,注意value),或者这样一个原始的JsStringJsNull

def parse(jsVal: JsValue) { 
    jsVal match { 
    case json: JsObject => 
    case json: JsArray => 
    case json: JsString => 
    ... 
    } 
}