сломанная сериализация OrderedHash YAML в Rails 2.3.11? - PullRequest
1 голос
/ 28 июля 2011

У меня сложная структура данных, например: OrderedHash, ключи - это даты, а значения - упорядоченные хеши, которые содержат целые числа со строковыми ключами.Мне нужно сериализовать их, чтобы хранить в БД.Но после того, как to_yaml / YAML.load данные иногда ломаются - некоторые из хэшей второго уровня заменяются на первый уровень или наоборот.Однако иногда оно не нарушается.

Представление yaml выглядит следующим образом

  • 2011-07-10:! Omap
    • 00: 00-01: 00:0
    • 01: 00-02: 00: 0
    • 02: 00-03: 00: 0
    • 03: 00-04: 00: 0
    • 04: 00-05: 00: 0
    • 05: 00-06: 00: 0
    • 06: 00-07: 00: 0
    • 07: 00-08: 00: 0
    • * id010
    • 09: 00-10: 00: 0
    • 10: 00-11: 00: 0
    • 11: 00-12: 00: 0
    • 12: 00-13: 00: 0
    • 13: 00-14: 00: 0
    • 14: 00-15: 00: 0
    • 15: 00-16: 00: 0
    • 16: 00-17: 00: 0
    • 17: 00-18: 00: 0
    • 18: 00-19: 00: 0
    • 19: 00-20: 00: 0
    • 20: 00-21: 00: 0
    • 21: 00-22: 00: 0
    • 22: 00-23: 00: 0
    • 23: 00-23: 59: 0

Эта часть * id010 / & id010 вставляется случайным образом в разные места кода yaml.Я думаю, что это является причиной ошибки.

Кто-нибудь имеет представление о том, что не так с сериализацией yaml?ruby 1.8.6, обновление до 1.9 не вариант: (

Ответы [ 2 ]

0 голосов
/ 16 июля 2014

Я предполагаю, что id010 существует, потому что у вас может быть какая-то рекурсивная / самоссылающаяся структура, и это способ справиться с этим.

0 голосов
/ 28 июля 2011

Очень возможно, что есть ошибка.Я считаю, что движок YAML, который использует Ruby 1.8, называется Syck, и этот код был создан _why много лет назад.С тех пор код не поддерживается должным образом.

В Ruby 1.9 предполагается использовать новый движок под названием Psych, но я не уверен, насколько это совместимо с Ruby 1.8.

Вкл.Github Я также нашел другую альтернативу, которая, похоже, стоит попробовать:
https://github.com/cesare/ruby-libc-libyaml

Syck (вы можете попробовать эту версию, так какпохоже, что он почти не поддерживается): https://github.com/indeyets/syck

Psych (вы также можете попробовать проверить, работает ли он на 1.8):
https://github.com/tenderlove/psych


РЕДАКТИРОВАТЬ

Возможно, JSON может быть для вас альтернативой?Взгляните на метод to_json и посмотрите, можно ли его использовать для ваших целей, и, возможно, обойдете проблемы YAML таким образом.

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