[英]how to escape \ in received json fields
我的應用程序在 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 - 在“測試方法”中,我沒有在響應中明確添加\\
s。 發送響應時,我只是在case class
上調用toString()
。 Json.toJson(externalProfileAPI).toString()
。 如果\\
是問題,我怎樣才能不在發送的響應中發送它們或在客戶端轉義它們?
問題1:轉換失敗是因為接收到的消息中的json字段中有
\\
嗎?
是的,因為當前狀態的字符串不是正確的 Json,您必須刪除(轉義)那些反斜杠。
問題 2:如果
\\
是問題,我怎樣才能不在發送的響應中發送它們或在客戶端轉義它們?
你有沒有機會在發送端的 json 上調用JSON.stringify()
? 如果是這樣,刪除它會刪除反斜杠。 否則,您可以調用JSON.parse(YOUR_STRING)
來轉義接收端的反斜杠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.