Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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字段中转义\_Json_Playframework 2.6 - Fatal编程技术网

如何在收到的json字段中转义\

如何在收到的json字段中转义\,json,playframework-2.6,Json,Playframework 2.6,我的应用程序在Http响应中收到一个json {"result":"success","additional-info":"{\"external-profile\":{\"email\":\"test@test.com\",\"firstname\":\"ln\",\"lastname\":\"fn\",\"password\":\"somePassword\"}}"} 我编写了一个reads来将传入消息转换为案例类 implicit val externalProfileAPIReads

我的应用程序在Http响应中收到一个
json

 {"result":"success","additional-info":"{\"external-profile\":{\"email\":\"test@test.com\",\"firstname\":\"ln\",\"lastname\":\"fn\",\"password\":\"somePassword\"}}"}
我编写了一个
reads
来将传入消息转换为
案例类

implicit val externalProfileAPIReads:Reads[ExternalUserProfileAPI] = (
    (JsPath \ "external-profile").read[ExternalUserProfile]
    ).map((x:ExternalUserProfile)=>(ExternalUserProfileAPI.apply(x)))
但是在我的单元测试中,当我尝试转换消息时,转换失败

val message = (responseBody \ "additional-info").get.as[ExternalUserProfileAPI]
错误是

JsResultException(errors:List((/external-profile,List(JsonValidationError(List(error.path.missing),WrappedArray())))))
play.api.libs.json.JsResultException: JsResultException(errors:List((/external-profile,List(JsonValidationError(List(error.path.missing),WrappedArray())))))
    at play.api.libs.json.JsReadable.$anonfun$as$2(JsReadable.scala:25)
问题1-转换失败是因为收到的消息中的
json
字段中包含
\

问题2-在“测试中的方法”中,我没有在回答中明确添加
\
s。发送响应时,我只需调用
case类上的
toString()
Json.toJson(externalProfileAPI).toString()
。如果问题出在
\
上,我怎样才能在发送响应中不发送它们,或者在客户端转义它们

问题1:转换失败是因为 收到的消息中是否包含
\

是的,因为当前状态的字符串不是正确的Json,所以必须删除(转义)这些反斜杠

问题2:如果问题出在
\
上,我怎么能不在 发送响应还是在客户端转义


您是否碰巧在发送端的JSON上调用了
JSON.stringify()
?如果是这样,删除它将删除反斜杠。否则,您可以调用
JSON.parse(您的_字符串)
来避免接收端的反斜杠。

在发送端,我调用
val result:Future[AuthenticatorResult]=screet.env.authenticatorService.embed(securityToken,Ok(JSON.toJson(JSON.toresultsuccess(JSON.toJson(externalProfileAPI.toString()))))
)。我不知道这是否增加了“\”。在接收端,我尝试了
valresponsebody:String=contentAsString(resultFuture);println(s“收到结果${responseBody}”);val responsebodyasjson=Json.parse(responseBody);println(s“作为json${responseBodyAsJSON}接收的结果”)
`但是我还是得到了“\”我刚刚意识到在JSON中实际上有一个“字符串化”的JSON,在这种情况下,简单地使用
JSON.parse
是没有帮助的。是否必须将Json嵌套在内部,如果不这样做可能会更容易,但如果必须将其嵌套在其中,请将Json子元素提取出来并调用
Json。对其进行解析应该可以。谢谢。所以<代码> ValeRetrySys= CtrutsAsJSON(RetryType)/RealthBoobe有反斜杠然后>代码> Value:String =(RetrySpple“附加信息”)。如[字符串] / /删除反斜杠< /代码>,最后>代码> ValuePrrase= JSON.PARSE(消息)< /Cord> >我很高兴能帮助您,如果我的答案对您有所帮助,请考虑投票。