2014-09-29 85 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 => 
    ... 
    } 
}