使用Json4s Scala从嵌套Json中提取字段列表

时间:2017-06-02 14:01:36

标签: json scala json4s

我正在尝试解析嵌套的Json并从fields标记中获取name的列表。

{
"subject": "table-name",
"version": 1,
"id": 234,
"schema": "{
           \"type\":\"record\",\"name\":\"table-name\",
           \"fields\":[
                      {\"name\":\"NAME\",\"type\":\"CHARACTER\},
                      {\"name\":\"EID\",\"type\":\"INT\"},
                      {\"name\":\"DEPARTMENT\",\"type\":\"CHARACTER\"}
                      ]
          }"
}

我检查了几个帖子,并提出了以下代码。我可以获得架构定义(相当简单),但不能从name获取fields列表。

case class Names(name : String)
case class FieldNames(fields: List[Names])
case class ColNames(subject: String, schema: FieldNames)
implicit val formats = DefaultFormats
val sourceSchema = parse("JsonStr").extract[ColNames]
println(sourceSchema)

我的想法是schema: FieldNames部分会将fields标记给我,然后List[Names]会将name列为我,但我得到的只是空列表。如果我使用schema: FieldNames更改schema: String,我也会获得架构,但之后我无法获得所需的name列表。以下是当前的输出:

ColNames(table-name,FieldNames(List()))

更新 我得到了它的工作,但我最终解析了相同的Json两次,我觉得这是最好的方式。我仍然想知道完成它的最佳方法。以下是我目前的解决方案:

case class Name(name : String)
case class FieldNames(fields: List[Name])
case class ColNames(subject: String, schema: String)
val sourceSchema = parse("JsonStr").extract[ColNames]
val cols= parse(sourceSchema.schema).extract[FieldNames]

输出:

FieldNames(List(Name(NAME), Name(EID), Name(DEPARTMENT)))

0 个答案:

没有答案