【问题标题】:Rails Escaping JSONRails 转义 JSON
【发布时间】:2018-01-31 16:56:25
【问题描述】:

我正在开发一个外部 API。

他们希望 JSON 作为查询参数中 GET 请求的字符串。

Ruby 的问题在于它将 JSON 视为字符串并转义引号,因此我们最终发送:

"{\"api_key\":\"9e4b33422adb-3832c7-41379-b2f31-8fc295aefb8c8\",\"ip\":\"184.61.23.239\"}

而不是他们的系统所期望的{"api_key":"9e4b33422adb-3832c7-41379-b2f31-8fc295aefb8c8","ip":"184.61.23.239"}

知道处理格式化 JSON 以匹配其标准的最佳方法吗?

【问题讨论】:

  • 肯定是这样发送的?我认为转义只是在控制台中显示字符串化的 JSON 时,但如果你 puts 上面的相同代码看起来像你想要的那样(即它实际上不包含重要时使用反斜杠)。

标签: ruby-on-rails json ruby


【解决方案1】:

你可以使用JSON.parse,即,

JSON.parse("{\"api_key\":\"9e4b33422adb-3832c7-41379-b2f31-8fc295aefb8c8\",\"ip\":\"184.61.23.239\"}") 

返回

{"api_key" => "9e4b33422adb-3832c7-41379-b2f31-8fc295aefb8c8","ip" => "184.61.23.239"}

【讨论】:

    【解决方案2】:

    另一个解决方案是使用 gem 'oj'。我更喜欢使用这个 gem,因为它速度快而且性能好。

    像这样与 oj 一起使用:

    j = Oj.load("{\"api_key\":\"9e4b33422adb-3832c7-41379-b2f31-8fc295aefb8c8\",\"ip\":\"184.61.23.239\"}")
    

    会是:

    => {"api_key"=>"9e4b33422adb-3832c7-41379-b2f31-8fc295aefb8c8", "ip"=>"184.61.23.239"}
    

    【讨论】:

    • 知道这实际上是什么性能改进吗?
    • @TomHammond 请访问github.com/ohler55/oj 并阅读性能比较。谢谢。
    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多