我正在处理一个包含嵌套对象的 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/