Json字符串到Scala中的Map - > Liftweb

时间:2018-03-22 12:17:34

标签: scala lift-json

这是我的输入结构。这里的所有字段都是可选的,因为它在此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)

2 个答案:

答案 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)

参考:https://github.com/spray/spray-json