如何迭代org.json4s.JsonAST.JValue,这是一个JSON对象数组,以分别处理Scala中的每个对象?

如何迭代org.json4s.JsonAST.JValue,这是一个JSON对象数组,以分别处理Scala中的每个对象?,json,scala,json4s,Json,Scala,Json4s,我有一个示例数组: [{ "abc":"1", "de":"1" }, { "fgh":"2", "ij":"4" }] 这是一个org.json4s.JsonAST.JValue 如何迭代数组中的每个对象,对每个对象分别进行操作?您应该能够对JArray进行强制转换 val myArray = myVal.asInstanceOf[JArray] myArray.arr // the array 或者最好使用scala匹配,以便确认类型是否正确。以下是您的j

我有一个示例数组:

[{
    "abc":"1",
    "de":"1"
},
{
    "fgh":"2",
    "ij":"4"
}]
这是一个org.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 {
      JArray(objList) <- json
      JObject(obj) <- objList
    } {
      // do something
      val kvList = for ((key, JString(value)) <- obj) yield (key, value)
      println("obj : " + kvList.mkString(","))
    }
    

    然后做点什么

    for (obj <- list) println("obj : " + obj.toList.mkString(","))
    

    json4s的文档是。

    我正要进入scala match噩梦来解决这个问题。就像这样,它非常完美。你能解释一下这种模式匹配是如何工作的吗?t、 过滤器(a=>{a match{case JArray(b)=>println(b);case other=>println(other)};true})。它返回7个匹配项。列表(JObject)(列表((abc,JString(1)),(de,JString(1))),JObject(列表((fgh,JString(2)),(ij,JString(4‘‘‘)’))JObject(列表((abc,JString(1)),(de,JString(1)))JString(1)JObject(列表((fgh,JString(2)),(ij,JString(4)))JString(2)JString(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)