【问题标题】:How to convert a ruby hash object to JSON?如何将 ruby​​ 哈希对象转换为 JSON?
【发布时间】:2011-03-12 03:48:36
【问题描述】:

如何将 ruby​​ 哈希对象转换为 JSON?所以我在下面尝试这个例子,它不起作用?

我正在查看 RubyDoc,显然 Hash 对象没有 to_json 方法。但我在博客上读到 Rails 支持active_record.to_json,也支持hash#to_json。我可以理解ActiveRecord 是一个Rails 对象,但Hash 不是Rails 原生的,它是一个纯Ruby 对象。所以在 Rails 中你可以做 hash.to_json,但在纯 Ruby 中不行??

car = {:make => "bmw", :year => "2003"}
car.to_json

【问题讨论】:

    标签: ruby-on-rails json ruby hashmap


    【解决方案1】:

    在文件顶部添加以下行

    require 'json'
    

    那么你可以使用:

    car = {:make => "bmw", :year => "2003"}
    car.to_json
    

    或者,您可以使用:

    JSON.generate({:make => "bmw", :year => "2003"})
    

    【讨论】:

      【解决方案2】:

      你也可以使用JSON.generate:

      require 'json'
      
      JSON.generate({ foo: "bar" })
      => "{\"foo\":\"bar\"}"
      

      或其别名JSON.unparse

      require 'json'
      
      JSON.unparse({ foo: "bar" })
      => "{\"foo\":\"bar\"}"
      

      【讨论】:

      【解决方案3】:
      require 'json/ext' # to use the C based extension instead of json/pure
      
      puts {hash: 123}.to_json
      

      【讨论】:

        【解决方案4】:

        Ruby 的众多优点之一是可以使用您自己的方法扩展现有类。这就是所谓的“课堂重开”或猴子补丁(不过是后者can vary 的含义)。

        所以,看这里:

        car = {:make => "bmw", :year => "2003"}
        # => {:make=>"bmw", :year=>"2003"}
        car.to_json
        # NoMethodError: undefined method `to_json' for {:make=>"bmw", :year=>"2003"}:Hash
        #   from (irb):11
        #   from /usr/bin/irb:12:in `<main>'
        require 'json'
        # => true
        car.to_json
        # => "{"make":"bmw","year":"2003"}"
        

        如您所见,要求json 神奇地将方法to_json 带到了我们的Hash

        【讨论】:

        • 我只能说哇 :) 也非常感谢!!所以基本上我能够动态扩展 json 类??
        • 我用 Ruby 对象尝试了同样的事情,但它不起作用?? >> 要求 'json' => true >> class Person >> attr_accessor :fname, :lname >> end => nil >> p = Person.new => #<0x101155f70><0x101155f70>
        猜你喜欢
        • 1970-01-01
        • 2011-06-29
        • 2011-12-19
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        • 2020-09-15
        • 1970-01-01
        相关资源
        最近更新 更多