试图在Ruby中使用无效的JSON?

时间:2014-04-21 14:55:13

标签: ruby json

我正在尝试进行测试,以验证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?

1 个答案:

答案 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处理器的字符串一样好。