Я создал следующий классНевозможно разобрать JSON с рубином
class Contact
def initialize(id, name, phone)
@id = id
@name = name
@phone = phone
end
def to_json(*a)
{
json_class: self.class.name,
data: { id: @id, name: @name, phone: @phone }
}.to_json(*a)
end
def self.json_create(o)
new(o[:data][:id], o[:data][:name], o[:data][:phone])
end
end
теперь я могу преобразовать его в формат JSON с помощью этого
Contact.new(1,'nik',10).to_json
=> "{\"json_class\":\"Contact\",\"data\":{\"id\":1,\"name\":\"nik\",\"phone\":10}}"
Но она взрывается с ошибкой, когда я звоню JSON.parse
на Это.
JSON.parse(Contact.new(1,'nik',10).to_json)
NoMethodError: undefined method `[]' for nil:NilClass
from (irb):44:in `json_create'
Я взял синтаксис из this учебник.
Это было трюк, не могли бы вы сказать мне, почему я сделал это неправильно, у меня создалось впечатление, что символы и строки могут использоваться взаимозаменяемо, а символы имеют лучшую производительность. – nikhil
Символы и строки - разные объекты. Символы всегда относятся к одному и тому же объекту, тогда как строки являются новыми объектами каждый раз, когда они ссылаются (если они не сохранены в переменной). –
Что сказал @ AndréSantosdeMedeiros правильно. Поведение, о котором вы думаете, - это нечто, что связано с Rails, которое предоставляет [HashWithIndifferentAccess] (http://as.rubyonrails.org/classes/HashWithIndifferentAccess.html), который позволяет использовать либо символ, либо строчную форму ключа для доступ к значению. –