我正在尝试解析嵌套的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)))