从Ruby on Rails将JSON发布到API

时间:2011-12-13 23:12:08

标签: ruby-on-rails ruby json hash

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

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

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

当我发送帖子数据而不对其进行编码时,我收到格式错误的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

我需要它递归。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

这可能就是你要找的东西:

https://github.com/rails/jbuilder