我的应用程序在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 class
。 Json.toJson(externalProfileAPI).toString()
。如果\
是问题,我怎么能不在发送的响应中发送它们或在客户端逃避它们?
问题1:转换是否失败,因为收到的消息中的json字段中包含
\
?
是的,因为当前状态的字符串不是正确的Json,你必须删除(转义)那些反斜杠。
问题2:如果
\
是问题,我怎么能不在发送的响应中发送它们或在客户端逃避它们?
你有没有机会在发送端的json上调用JSON.stringify()
?如果是这样,删除它将删除反斜杠。否则,您可以调用JSON.parse(YOUR_STRING)
来逃避接收端的反斜杠。