我正在尝试进行测试,以验证cURL请求中的无效JSON是否返回400错误代码。不幸的是,Ruby不允许我使用无效的JSON。
if bad_json
credentials = {
"username" => username
"password" => password
}.to_json
else
credentials = {
"username" => username,
"password" => password
}.to_json
end
当我尝试运行测试时,产生以下内容:
/foo.rb:60: syntax error, unexpected tSTRING_BEG, expecting '}'
"password" => password
^
/foo.rb:60: syntax error, unexpected =>, expecting keyword_end
"password" => password
^ (SyntaxError)
是否可以在没有脚本破坏的情况下传递此无效JSON?
答案 0 :(得分:1)
正如其他人评论你的Ruby有语法错误。您必须拥有有效的Ruby,并且只有在我正确理解您的问题时才会在JSON中出错。
具体来说,您似乎在告诉Ruby创建一个Hash,然后将其转换为包含恰好符合JSON规范的文本的String。只需直接制作该文本,即可控制其符合程度。
if bad_json
credentials = "{\"username\":\"#{username}\" \"password\":\"#{password}\"}"
else
credentials = "{\"username\":\"#{username}\",\"password\":\"#{password}\"}"
end
编辑 - 更多详情
为了使这一点更清楚,这里是irb / pry中的简化示例:
[1] pry(main)> {}.class
=> Hash
[2] pry(main)> {}.to_json
=> "{}"
[3] pry(main)> {}.to_json.class
=> String
[4] pry(main)> "{}".class
=> String
在这里我们可以看到to_json只返回一个字符串。因此,如果您可以自己创建符合JSON的字符串,那么它就像制作JSON处理器的字符串一样好。