这是我的输入结构。这里的所有字段都是可选的,因为它在此json字符串中可以包含零个或多个元素。我可以使用liftweb或常规scala。
{
"fname" : String,
"lname" : String,
"age" : String,
"gender" : String,
"phone" : String,
"mstatus" : String
}
输入:(注意此处“mstatus”不可用且“gender”为空)
{
"fname" : "Thomas",
"lname" : "Peter",
"age" : "20",
"gender" : "",
"phone" : "12345
}
我想读取这个Json字符串并检查密钥是否存在且其值是否为null然后添加到地图中。我的输出地图如下所示。
val inputMap = Map(
"fname" -> "Thomas"
"lname" -> "Peter"
"age" -> "20",
"phone" -> "12345)
答案 0 :(得分:0)
希望这可以帮到你。
scala> val jsonString = """{
"fname" : "Thomas",
"lname" : "Peter",
"age" : "20",
"gender" : "",
"phone" : "12345"
}"""
jsonString: String =
{
"fname" : "Thomas",
"lname" : "Peter",
"age" : "20",
"gender" : "",
"phone" : "12345"
}
scala> val r = JSON.parseFull(jsonString)
.getOrElse(Map[String,Any]())
.asInstanceOf[Map[String,Any]].collect{
case e : (String, Any) if(e._2 != null && !e._2.toString.isEmpty) => e
}
r: scala.collection.immutable.Map[String,Any] = Map(fname -> Thomas, age -> 20, lname -> Peter, phone -> 12345)
答案 1 :(得分:0)
您可以使用Spary Json lib进行转换和处理。
val jsonString: String =
"""{
| "fname" : "Thomas",
| "lname" : "Peter",
| "age" : "20",
| "gender" : "",
| "phone" : "12345"
|}""".stripMargin
解析json并得到这样的map键值,
import spray.json._
val jsonMapKeyVal: Map[String, String] =
jsonString.parseJson
.asJsObject
.fields
.map {
case (k, JsString(v)) => k -> v
}
.filter(_._2!="")
结果:
Map(fname -> Thomas, age -> 20, lname -> Peter, phone -> 12345)