如何在收到的json字段中转义\
我的应用程序在Http响应中收到一个如何在收到的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
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> >我很高兴能帮助您,如果我的答案对您有所帮助,请考虑投票。