如何在使用Scala Play Json框架解析Json时获取键和值?
我有一个json文件,其中包含一些键和值。我需要解析Json并打印键及其值。例如,json文件如下所示。我想将其打印为键和值如何在使用Scala Play Json框架解析Json时获取键和值?,json,scala,bigdata,jsonparser,play-json,Json,Scala,Bigdata,Jsonparser,Play Json,我有一个json文件,其中包含一些键和值。我需要解析Json并打印键及其值。例如,json文件如下所示。我想将其打印为键和值 { "Parcer":[ { "key":"0203", "value":{ "Encryption": { "enabled":"yes",
{
"Parcer":[
{
"key":"0203",
"value":{
"Encryption":
{
"enabled":"yes",
"encryption_type":"base64",
"key":"334848484",
"return":"name"
}
}
},
{
"key":"0405",
"value":{
"Encryption":
{
"enabled":"yes",
"encryption_type":"base64",
"key":"334848484",
"return":"none"
},
"Parcer":[
{
"key":"0102",
"value":"humidity"
},
{
"key":"0304",
"value":{
"Encryption":{
"enabled":"yes",
"encryption_type":"SHA1",
"key":"1211212",
"return":"none"
}
}
}
]
}
}],
}```
最简单的方法是创建一个
案例类
,如:
case class MyObj(header:String, value: Seq[Map[String, String]])
然后只需添加一行进行编组,如:
import play.api.libs.json._
object MyObj {
implicit val jsonFormat: OFormat[MyObj] = Json.format[MyObj]
}
现在,您可以使用一个很好的案例类
:
val json =
Json.parse(
"""{
"header" : "header value",
"value" : [
{
"a" : "a_val",
"b" : "b_val",
"c" : "c_val"
},
{
"a" : "a_val",
"b" : "b_val",
"c" : "c_val"
}
]
}""")
下面是一个如何检索所有“a”
的示例
这将为您提供:
json.validate[MyObj]
返回JsSuccess(MyObj(头值,向量(映射(a->a_val,b->b_val,c->c_val),映射(a->a_val,b->b_val,c->c_val)),)
println
返回:向量(a_val,a_val)
这在文档中有描述:如果
value
中的值不总是字符串(多么可怕的句子…),映射可以更改为value:Seq[Map[String,Any]]
。可能需要考虑:-)我们如何处理“a”中的嵌套值?我们可以指定JsPath而不是“a”吗?然后您不需要首先将其转换为案例类
-但我无法帮助您,因为我总是使用我在回答中向您展示的方式编辑我的问题并用这个json检查您的答案。但它不起作用。我是斯卡拉的新手。对不起,我犯了错误。
json.validate[MyObj] match {
case JsSuccess(myObj, _) =>
val allAs =myObj.value.flatMap(m => m.get("a").toSeq)
println(allAs) // >> Vector(a_val, a_val)
case e:JsError => // handle error
}