json - 如何迭代org.json4s.JsonAST.JValue(这是一个JSON对象数组)以分别在Scala中的每个对象上工作?

标签 json scala json4s

我有一个示例数组:

[{
    "abc":"1",
    "de":"1"
},
{
    "fgh":"2",
    "ij":"4"
}]

这是一个org.json4s.JsonAST.JValue。

如何遍历数组中的每个对象,分别对每个对象进行操作?

最佳答案

以下是您的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

    关于json - 如何迭代org.json4s.JsonAST.JValue(这是一个JSON对象数组)以分别在Scala中的每个对象上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898951/

    相关文章:

    java - 无法使用 Java 创建正确的 JSON

    android - 如何使用volley库发布JSON数据?

    reflection - Scala 相当于 C# 的 Expression API

    scala - 如何使用 json4s 将对象序列化为 AST?

    scala - 如何将 json4s JValue 转换为 Jackson JsonNode?

    ruby - 使用 Net/http 以 JSON 格式发布 Ruby 数据

    json - 是否有推荐的方法来构造多个 JSON 模式?

    scala - 在Scala中,如何折叠列表并返回中间结果?

    Scala:数学函数而不是方法

    json - 使用 json4s.replace 替换 Json AST 中的对象