Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 将JsValue转换为字符串_Json_Scala_Playframework 2.0 - Fatal编程技术网

Json 将JsValue转换为字符串

Json 将JsValue转换为字符串,json,scala,playframework-2.0,Json,Scala,Playframework 2.0,通读本文,我不知道如何将我的Some(JsValue)转换为字符串 例如: val maybeString: Option[JsValue] = getSomeJsValue(); // returns Some(JsValue) val str: String = maybeString match { case Some(x) => x.as[String] case _ => "0" } 运行时错误: play.api.Application$$anon

通读本文,我不知道如何将我的
Some(JsValue)
转换为字符串

例如:

val maybeString: Option[JsValue] = getSomeJsValue(); // returns Some(JsValue)

val str: String = maybeString match {
  case Some(x) => x.as[String]
  case _       => "0"
}
运行时错误:

play.api.Application$$anon$1: Execution exception[[JsResultException: JsResultException(errors:List((,List(ValidationErr
or(validate.error.expected.jsstring,WrappedArray())))))]]
        at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.3]

您的错误源于您没有对x的类型施加足够的条件:
maybeString
是一个
选项[JsValue]
,而不是
选项[JsString]
。如果
maybeString
不是
选项[JsString]
,转换将失败并引发异常

您可以这样做:

val str: String = maybeString match {
  case Some(x:JsString) => x.as[String]
  case _       => "0"
}

或者您可以使用
asOpt[T]
而不是
as[T]
,后者返回
Some(u.as[String])
,如果转换成功,则返回
None

您想要组合多个选项,这就是flatMap的用途:

maybeString flatMap { json =>
  json.asOpt[String] map { str =>
    // do something with it
    str
  }
} getOrElse "0"
或者作为理解的一种方式:

(for {
  json <- maybeString
  str <- json.asOpt[String]
} yield str).getOrElse("0")
(用于{

json好吧,如果我有
选项[JsValue]
,我怎么能把它转换成
字符串呢?@Kevin
maybeString.map(u.toString.getOrElse(“defaultString”)
,但这将转换所有
部分[JsValue]
(即只有当
maybeString
为空时才给你“defaultString”)。我想从你的问题中,如果你的
选项[JsValue]
碰巧是
某个[JsString]
的话,你想得到字符串表示形式,否则就得到默认值。(编辑之前的注释太慢了)它会给你“defaultString”只有当
maybeString
None
*我相信我理解你在帮助我如何将
Some(JsString)
转换为
String
,但是如果我有
Some(JsValue)
,那该怎么办?(如果我重复我自己的话,很抱歉。我只是不知道如何从Some(JsValue)转换为String…)
maybeString.map(u.toString).getOrElse(“默认”)
不起作用吗?这应该使用任何
选项[JsValue]
并返回其字符串表示形式,如果该选项为空,则返回“default”。错误消息是什么?如果您确定有一个JsString:maybeString.map(u.toString)好的-您的第一个实现对我来说是成功的。我使用了
asOpt[Long]
,因为
asOpt[String]
不匹配,即返回“0”,请尝试避免使用“get”或“getOrElse”