如何迭代 org.json4s.JsonAST.JValue 这是一个 JSON 对象数组以单独处理 Scala 中的每个对象?
How to iterate org.json4s.JsonAST.JValue which is an array of JSON objects to separately work on each object in Scala?
我有一个示例数组:
[{
"abc":"1",
"de":"1"
},
{
"fgh":"2",
"ij":"4"
}]
这是一个组织。json4s.JsonAST.JValue。
如何遍历数组中的每个对象,分别对每个对象进行操作?
您应该可以转换为 JArray
val myArray = myVal.asInstanceOf[JArray]
myArray.arr // the array
或者最好使用 Scala 匹配,以便确认类型是否正确。
以下是您的json.
scala> json
res2: org.json4s.JValue = JArray(List(JObject(List((abc,JString(1)), (de,JString(1)))),
JObject(List((fgh,JString(2)), (ij,JString(4))))))
有几种方法。
使用for
语法
for {
JArray(objList) <- json
JObject(obj) <- objList
} {
// do something
val kvList = for ((key, JString(value)) <- obj) yield (key, value)
println("obj : " + kvList.mkString(","))
}
转换为scala.collection
对象
val list = json.values.asInstanceOf[List[Map[String, String]]]
//=> list: List[Map[String,String]] = List(Map(abc -> 1, de -> 1), Map(fgh -> 2, ij -> 4))
或
implicit val formats = DefaultFormats
val list = json.extract[List[Map[String,String]]]
//=> list: List[Map[String,String]] = List(Map(abc -> 1, de -> 1), Map(fgh -> 2, ij -> 4))
然后做点什么。
for (obj <- list) println("obj : " + obj.toList.mkString(","))
两个输出都是
obj : (abc,1),(de,1)
obj : (fgh,2),(ij,4)
json4s的文档是here.
我有一个示例数组:
[{
"abc":"1",
"de":"1"
},
{
"fgh":"2",
"ij":"4"
}]
这是一个组织。json4s.JsonAST.JValue。
如何遍历数组中的每个对象,分别对每个对象进行操作?
您应该可以转换为 JArray
val myArray = myVal.asInstanceOf[JArray]
myArray.arr // the array
或者最好使用 Scala 匹配,以便确认类型是否正确。
以下是您的json.
scala> json
res2: org.json4s.JValue = JArray(List(JObject(List((abc,JString(1)), (de,JString(1)))),
JObject(List((fgh,JString(2)), (ij,JString(4))))))
有几种方法。
使用
for
语法for { JArray(objList) <- json JObject(obj) <- objList } { // do something val kvList = for ((key, JString(value)) <- obj) yield (key, value) println("obj : " + kvList.mkString(",")) }
转换为
scala.collection
对象val list = json.values.asInstanceOf[List[Map[String, String]]] //=> list: List[Map[String,String]] = List(Map(abc -> 1, de -> 1), Map(fgh -> 2, ij -> 4))
或
implicit val formats = DefaultFormats val list = json.extract[List[Map[String,String]]] //=> list: List[Map[String,String]] = List(Map(abc -> 1, de -> 1), Map(fgh -> 2, ij -> 4))
然后做点什么。
for (obj <- list) println("obj : " + obj.toList.mkString(","))
两个输出都是
obj : (abc,1),(de,1)
obj : (fgh,2),(ij,4)
json4s的文档是here.