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

问题描述 投票:1回答:1

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

 {"result":"success","additional-info":"{\"external-profile\":{\"email\":\"[email protected]\",\"firstname\":\"ln\",\"lastname\":\"fn\",\"password\":\"somePassword\"}}"}

我写了一个reads将传入的消息转换为case class

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。我发送回复时只是在toString()上调用case classJson.toJson(externalProfileAPI).toString()。如果\是问题,我怎么能不在发送的响应中发送它们或在客户端逃避它们?

json playframework-2.6
1个回答
1
投票

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

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

问题2:如果\是问题,我怎么能不在发送的响应中发送它们或在客户端逃避它们?

你有没有机会在发送端的json上调用JSON.stringify()?如果是这样,删除它将删除反斜杠。否则,您可以调用JSON.parse(YOUR_STRING)来逃避接收端的反斜杠。

© www.soinside.com 2019 - 2024. All rights reserved.