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

时间:2019-04-03 05:47:35

标签: json playframework-2.6

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

 {"result":"success","additional-info":"{\"external-profile\":{\"email\":\"test@test.com\",\"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-在“测试方法”中,我没有在响应中明确添加\。发送响应时,我只是在toString()上呼叫case classJson.toJson(externalProfileAPI).toString()。如果问题是\,我怎么不将其发送到已发送的响应中,或者在客户端将其转义?

1 个答案:

答案 0 :(得分:1)

  

问题1:转换是否失败,因为   收到的邮件中包含\

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

  

问题2:如果是\,我怎么不将其发送到   发送响应还是在客户端将其转义?

您是否偶然在发送端的json上致电了JSON.stringify()?如果是这样,将其删除将删除反斜杠。否则,您可以调用JSON.parse(YOUR_STRING)来逃避接收端的反斜杠。