我有一个跟随字符串,我想使用scala
拆分它"myInfo": "myName-name;model-R210;"
我想分割myInfo字符串的值,以便我可以单独访问myName及其值。 例如myName:名称,型号:R210等
我正在使用以下代码来拆分字符串 -
(mainString \ "myInfo").as[String].split("\\;").toList.map(_.split("\\-"))
其中mainString是Json并包含'myInfo'键值对。
如何拆分字符串以“ - ”分隔并访问它?
答案 0 :(得分:4)
您可以像这样获得Map[String,String]
:
val data: Map[String,String] = (mainString \ "myInfo").as[String]
.split("\\;").map(_.split("\\-").toList)
.collect {
case key :: value :: _ => key -> value
}.toMap
然后访问您的值:
val name = data.getOrElse("myName", "DefaultNameIfMissing")
答案 1 :(得分:0)
首先,对于将复杂数据结构编码为JSON文档中的字符串的人来说,感到羞耻;你根本不需要解析它。如果它在您的控制之下,我会将其更改为
"myInfo": {
"myName": "name",
"model": "R210"
}
但如果您无法更改输入,那么只需执行此操作即可获得所需的地图:
val myInfo = ((mainString \ "myInfo").as[String] split ';' map (_ split '-') collect { case Array(k,v) => k->v } ).toMap
无需从中间结果中创建列表 - 这只会减慢速度。然后拆分Char,而不是String(可以编译成正则表达式)。
请注意collect
会导致任何没有连字符或多个连字符的组件被忽略;你可能想在那里做点什么。