【问题标题】:How do I stop / from being escaped in json?如何阻止/在 json 中转义?
【发布时间】:2021-07-16 23:23:51
【问题描述】:

由于某种原因,带有/ 字符的变量被转换为\/,我该如何防止这种情况发生?

  1. 我通过运行npx http-echo-server 启动了一个在 localhost:3000 上侦听的 echo 服务器
  2. 我执行以下操作:

代码:

* def CHALLENGE_USER = '/abc/user'
* def loginJson = { user: '#(CHALLENGE_USER)' , name: 'Some Name'}
* print loginJson
* def TEST_URL = 'http://localhost:3000'
Given url TEST_URL+'/session/loginresponse'
And header Content-Type = 'application/json'
And request loginResponseJson
And method put
Then status 200

它像我预期的那样打印{ "user": "/abc/user", "name": "Some Name" }

  1. http 服务器日志显示 "--> {"user":"/schemes/ATT_5_55/CH_1","name":"Some Name"}"

  2. 空手道显示回声{"user":"\/abc\/user","name":"Some Name"}的结果

我试过了:

  • def CHALLENGE_USER = '/abc/user'
  • def CHALLENGE_USER = "/abc/user"
  • def CHALLENGE_USER = '/abc/user'
  • def CHALLENGE_USER = '//abc//用户'

事后设置变量也行不通:

* def loginJson = {  name: 'Some Name'}
* loginJson.user = CHALLENGE_USER

【问题讨论】:

  • 转义斜线是多余但合法的。没有理由担心。您需要修改您的测试以考虑到这一点。

标签: karate


【解决方案1】:

是的,根据 JSON 规范,这是合法的:JSON: why are forward slashes escaped?

我们使用的 Java 库就是这样做的。

您的服务器有问题吗?如果是这样 - 那么你有一个空手道出现的错误。

如果您真的想完全控制请求,请使用text,但 IMO 可能会浪费时间:https://stackoverflow.com/a/68344856/143475

【讨论】:

  • 天哪,我不知道 JSON 规范正斜杠转义。这似乎是一个功能而不是一个错误...... :-)
【解决方案2】:

一个讨厌的解决方法,请原谅我Peter Thomas

您可以将 json 转换为字符串,然后删除 \ 字符。

谢天谢地,我只有一个用例。

* def CHALLENGE_USER = '/abc/user'
* def loginJson = { user: '#(CHALLENGE_USER)' , name: 'Some Name'}
* string json = loginJson
* def loginJsonText = json.replaceAll("\\", "")
* print loginJson
* def TEST_URL = 'http://localhost:3000'
Given url TEST_URL+'/session/loginresponse'
And header Content-Type = 'application/json'
And request loginJsonText
And method put
Then status 200

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多