【问题标题】:POSTing JSON to API from Ruby on Rails从 Ruby on Rails 将 JSON 发布到 API
【发布时间】:2011-12-13 23:12:07
【问题描述】:

我正在尝试发布到这个第三方 API(基于 node.js 和 couchDB) 已经有一个正常运行的 PHP 应用程序成功发布到此 API,但我们正在将 ruby​​ 移到 Rails 上,我正在尝试连接一个测试站点。

在我没有创建的 PHP 应用程序中,他们使用 cURL 并将 POSTVARS 设置为似乎采用 javascript 点表示法的编码变量。

我正在使用 HTTParty,所​​以当我获取我的帖子数据并将其转换为 JSON 并提交时,这是不行的,因为使用 HTTParty,帖子变量必须是哈希。

当我发送未编码的帖子数据时,我收到格式错误的 JSON 错误。

是否有一种简单的方法可以将多维散列转换为键值对数组,其中键是该值的 JSON 点表示法?

我已经查看了这些文章的解决方案,但我对 ruby​​ 和 rails 还很陌生,所以我还没有取得太大进展。

http://www.goodercode.com/wp/convert-your-hash-keys-to-object-properties-in-ruby/

这是一篇很棒的文章,但我不确定您是如何实现该代码的。我把它放在 /lib 目录下的 hashify.rb 文件中并重新启动,但它似乎根本不起作用。

我也试过这样写一个类:

class Hashify

 def initialize(hash)
   hash.each do |k, v|

     k=k.gsub(/\.|\s|-|\/|\'/, '_').downcase.to_sym

     self.instance_variable_set("@#{k}", v) ## create and initialize an instance variable for this key/value pair
     self.class.send(:define_method, k, proc { self.instance_variable_get("@#{k}") }) ## create the getter that returns the instance variable
     self.class.send(:define_method, "#{k}=", proc { |v| self.instance_variable_set("@#{k}", v) }) ## create the setter that sets the instance variable
   end
 end
end

From here

我需要它是递归的。

【问题讨论】:

    标签: ruby-on-rails ruby json hash


    【解决方案1】:

    我不太确定您真正的问题是什么,但 Rails 提供了一种将哈希转换为参数的非常简单的方法,但它可能不适合您的问题。

    >> {:a => {:b => :c}}.to_param
    => "a%5Bb%5D=c"
    

    【讨论】:

      【解决方案2】:

      “Jbuilder 为您提供了一个简单的 DSL,用于声明 JSON 结构,优于按摩巨大的哈希结构。”

      这可能是您正在寻找的:

      https://github.com/rails/jbuilder

      【讨论】:

      • OOOO.... 这很有趣,可能是我正在寻找的。如果这可行,我会回来并将其标记为已回答。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      相关资源
      最近更新 更多