Я потратил несколько дней на то, чтобы опробовать все библиотеки JSON, включая гем JSON, Yajl-ruby, ActiveSupport :: JSON, и ничто не может сделать эту простую задачу:
user = User.find(1)
json = user.to_json
user2 = json.as_json # OR json.from_json
# OR JSON.parse(json)
# OR Yajl::Parser.parse(json)
# OR ActiveSupport::JSON.decode(json)
Когда я пытаюсь использоватьдесериализовав данные JSON для создания нового пользователя, я получаю одну из следующих ошибок:
User.new(Yajl::Parser.parse(json))
# ActiveRecord::UnknownAttributeError: unknown attribute: json_class
User.new(json.as_json)
# NoMethodError: undefined method `stringify_keys!' for #<String:0xb6de4318>
User.new(JSON.parse(json))
# NoMethodError: undefined method `stringify_keys!' for #<User:0xb6dc7470>
User.new(ActiveSupport::JSON.decode(json))
# NoMethodError: undefined method `stringify_keys!' for #<User:0xb6da3764>
Это очень легко сделать с помощью YAML, используя to_yaml и from_yaml.Почему to_json не может создать вид JSON, который from_json может преобразовать обратно в объект ruby?
Редактировать: я использую Rails 2.3.8, хотя я пробовал 2.3.5 и 3.0.0.Кроме того, я использую плагин json-rpc для создания службы JSON-RPC, хотя та же проблема сохраняется и без плагина.