json - 从 JSON 文件中提取子对象(作为 JSON)

标签 json scala

我正在处理一个包含嵌套对象的 JSON 文件,并且希望提取子对象而不将它们转换为 Scala 案例类等效项。是否有任何预先构建的功能可以通过这种方式过滤掉 JSON 文本 block ?

例如,如果我有一个内容类似于以下内容的 JSON 文件:

{
  "parentObject": "bob",
  "parentDetail1": "foo",
  "subObjects": [
    {
      "childObjectName": "childname1",
      "detail1": "randominfo1",
      "detail2": "randominfo1"
    },
    {
      "childObjectName": "childname2",
      "detail1": "randominfo2",
      "detail2": "randominfo2"
    },
    {
      "childObjectName": "childname3",
      "detail1": "randominfo3",
      "detail2": "randominfo3"
    }
  ]
}

我想提取子对象节点,理想情况下作为 JSON 文本的单独 block (可能作为字符串数组,每个子对象作为一个元素)。我知道我可以将整个 JSON 文件解析为我在 Scala 类中预定义的对象,但宁愿不采用该方法,因为这对于较大的文件来说可能太昂贵了。 我正在寻找一种简单而优雅的方式来这里。有什么想法吗?

最佳答案

使用 json-lenses 的解决方案并喷射 json

import spray.json.DefaultJsonProtocol._
import spray.json._
import spray.json.lenses.JsonLenses._

object Main extends App {

 val jsonData =
   """
     |{
     |  "parentObject": "bob",
     |  "parentDetail1": "foo",
     |  "subObjects": [
     |    {
     |      "childObjectName": "childname1",
     |      "detail1": "randominfo1",
     |      "detail2": "randominfo1"
     |    },
     |    {
     |      "childObjectName": "childname2",
     |      "detail1": "randominfo2",
     |      "detail2": "randominfo2"
     |    },
     |    {
     |      "childObjectName": "childname3",
     |      "detail1": "randominfo3",
     |      "detail2": "randominfo3"
     |    }
     |  ]
     |}
   """.stripMargin.parseJson


  val subObjectsLens = 'subObjects / *

  val subObjects = jsonData.extract[JsValue](subObjectsLens)

  println(subObjects map {_.compactPrint} mkString ", ")
}

关于json - 从 JSON 文件中提取子对象(作为 JSON),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30330464/

相关文章:

json - Marshal 和 Unmarshal a time.Time,得到不同的值

scala - Akka 在响应非 Actor 代码时避免包装 future

sql - 优化 Spark 中的 Hive 表加载时间

javascript - 使用点语法访问数据

json - 无法在 ListView 中加载变量

scala - 如何在SBT中使用带前缀文件夹的ZIP文件

api - 请解释使用 Option 的 orNull 方法

Scala - future 和并发

javascript - 尝试将responseJSON存储在变量中会导致 "undefined"错误

c# - 如何使用 NewtonSoft 更新 JSON 对象的属性