Ruby on Rails JSON.parse (object.to_json) не возвращает исходный объект - PullRequest
3 голосов
/ 15 ноября 2010

Кажется, что с таким объектом:

#<Course id: 1, name: "Targeting Triple Negative Breast Cancer", description: nil, disclosure: nil, created_at: "2010-11-11 14:43:31", updated_at: "2010-11-11 14:43:31", picture: nil, course_reference_id: nil, authors: "Lisa A. Carey, M.D.", volumn_number: nil, publication_date: nil, expiration_date: nil, credits: 1, featured: false>

я смогу сделать JSON.parse(course.to_json), но когда я пытаюсь это сделать, вместо того, чтобы возвращать исходный объект, я получаю эквивалент курса.new (объект с нулевыми атрибутами).

Когда я делаю course.to_json, я получаю:

"{\"attributes\":{\"name\":\"Targeting Triple Negative Breast Cancer\",\"expiration_date\":null,\"created_at\":\"2010-11-11 14:43:31\",\"featured\":\"0\",\"publication_date\":null,\"updated_at\":\"2010-11-11 14:43:31\",\"id\":\"1\",\"disclosure\":null,\"volumn_number\":null,\"credits\":\"1\",\"authors\":\"Lisa A. Carey, M.D.\",\"course_reference_id\":null,\"description\":null,\"picture\":null},\"json_class\":\"Course\",\"attributes_cache\":{}}"

Но когда я делаю JSON.parse(course.to_json), я получаю:

#<Course id: nil, name: nil, description: nil, disclosure: nil, created_at: nil, updated_at: nil, picture: nil, course_reference_id: nil, authors: nil, volumn_number: nil, publication_date: nil, expiration_date: nil, credits: nil, featured: false>

Я использую Rails 2.3.5 и получаю тот же результат с другими объектами.

1 Ответ

3 голосов
/ 15 ноября 2010

Для сериализации / десериализации объекта используйте #to_json и #from_json. Не пытайтесь анализировать строку JSON напрямую.

json = Course.new(...).to_json
Course.new.from_json(json)

Также обратите внимание, что вам следует избегать прямого вызова JSON.parse. Вместо этого используйте ActiveSupport::JSON bridge.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...