加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

解析 – 轻松解析Key = Value对的字符串到Scala案例类

发布时间:2020-12-16 18:53:45 所属栏目:安全 来源:网络整理
导读:有没有办法轻松地将一串键值对解析成 scala案例类? 例如,来自以下字符串 "consumer_key=1234ABC,consumer_secret=12345ABC" 成 case class Auth( consumerKey:String,consumerSecret:String) 甚至 case class Auth(consumer_key:String,consumer_secret:Str
有没有办法轻松地将一串键值对解析成 scala案例类?

例如,来自以下字符串

"consumer_key=1234ABC,consumer_secret=12345ABC"

case class Auth( consumerKey:String,consumerSecret:String)

甚至

case class Auth(consumer_key:String,consumer_secret:String)

解决方法

您可以使用正则表达式和模式匹配:

scala> val R = "consumer_key=(.*),consumer_secret=(.*)".r
R: scala.util.matching.Regex = consumer_key=(.*),consumer_secret=(.*)

scala> "consumer_key=1234ABC,consumer_secret=12345ABC" match {
     |   case R(k,v) => Auth(k,v)
     | }
res0: Auth = Auth(1234ABC,12345ABC)

使用JavaTokenParsers进行更灵活的解析:

import scala.util.parsing.combinator._

case class Auth( consumerKey: String,consumerSecret: Option[String])

class AuthParser extends JavaTokenParsers {
  def auth: Parser[Auth] = key ~ opt("," ~> secret) ^^ { case k ~ s => Auth(k,s)}
  def key: Parser[String] = value("consumer_key")
  def secret: Parser[String] = value("consumer_secret")
  def value(k: String): Parser[String] = k ~ "=" ~> "[^,]*".r
  def apply(s: String) = parseAll(auth,s)
}

用法:

scala> val p = new AuthParser
p: AuthParser = AuthParser@433b9799

scala> p("consumer_key=1234ABC,consumer_secret=12345ABC").get
res0: Auth = Auth(1234ABC,Some(12345ABC))

scala> p("consumer_key=1234ABC").get
res1: Auth = Auth(1234ABC,None)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读