ActiveSupport :: JSON декодирует потерянные хеш-символы - PullRequest
7 голосов
/ 04 марта 2011

Я пытаюсь сериализовать и десериализовать хеш.Когда хеш-код удален, ключи не символизируются;например, не больше: один, а скорее «один».

С консоли rails:

>>h = { :one =>1, :two => "two"}
{:one=>1, :two=>"two"}
>>j = ActiveSupport::JSON.encode(h)
"{\"one\":1,\"two\":\"two\"}"
>>h2 = ActiveSupport::JSON.decode(j)
{"one"=>1, "two"=>"two"}
>>h2[:one]
nil
>>h[:one]
1

Я сейчас переключился на использование Marshal.dump / load.Однако я хотел показать это, чтобы увидеть, есть ли способ сохранить это в JSON (просто для удобства чтения).

Ответы [ 2 ]

18 голосов
/ 10 октября 2012

JSON.parse(j, {:symbolize_names => true}) должно быть немного лучше, потому что он (я полагаю) никогда не создает строковые ключи в первую очередь и, следовательно, сохраняет память для больших хэшей с такими же часто повторяемыми ключами

8 голосов
/ 04 марта 2011
h2 = ActiveSupport::JSON.decode(j).symbolize_keys
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...