【问题标题】:Ruby object to jsonRuby 对象到 json
【发布时间】:2015-12-01 14:56:05
【问题描述】:

我正在尝试创建一个对象并将其转换为 json。

require 'json'

class Person
  attr_accessor :first_name, :last_name
  def to_json
    hash = {}
    self.instance_variables.each do |var|
      hash[var] = self.instance_variable_get var
    end
    hash.to_json
  end
end

person = Person.new
person.first_name = "Michael"
person.last_name = "Jordon"

我得到了输出:

person.to_json
# => {"@first_name":"Michael","@last_name":"Jordon"}

我必须做些什么改变才能使 @ 符号不作为 json 字符串中变量名的一部分出现?

【问题讨论】:

  • 如果您要手动执行此操作,则使用正常的字符串操作从符号中删除前导 @(这是符号;这是您希望将其转换为字符串的提示)。不过,有大量的库可以为您完成所有这些工作。

标签: ruby json


【解决方案1】:

只需换行:

hash[var] = self.instance_variable_get var

到:

hash[var.to_s[1..-1]] = self.instance_variable_get var

你会得到:

puts person.to_json
  #=> {"first_name":"Michael","last_name":"Jordon"}

【讨论】:

    【解决方案2】:

    您可以使用 Rails Active Support JSON 扩展

    require 'active_support/json'
    
    class Person
      attr_accessor :first_name, :last_name
    end
    
    person = Person.new
    person.first_name = "Michael"
    person.last_name = "Jordon"
    
    puts ActiveSupport::JSON.encode(person)
    # {"first_name":"Michael","last_name":"Jordon"}
    

    此处解释了更多选项 - Ruby objects and JSON serialization (without Rails)

    【讨论】:

    • 我不想使用其他库。最好是使用 ruby​​ +json 库谢谢!
    • 好吧,这可能不是一件小事——即使JSON#generate 的默认 Ruby 实现(很方便)也可以处理类似哈希的对象。但是,它会很有趣 - 所以,玩得开心!
    猜你喜欢
    • 2014-04-24
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2012-09-25
    • 2017-01-18
    • 2016-05-10
    相关资源
    最近更新 更多