2014-03-18 5 views
0

Я работаю с Hamster драгоценным камнем в моем проекте, и перед тем, как сериализоваться на json, я столкнулся с проблемой. Вот что я Toking о:Проблемы с Hamster.vector с преобразованием в json

hamster = Hamster.vector() 
=> [] #is empty 
hamster.to_json 
=> "{\"levels\":0,\"root\":[],\"size\":0}" # what is this? 

Итак, мой вопрос:

Может кто-нибудь объяснить мне, почему Hamster добавив levels, root и size ключи к объекту и как я могу удалить их из мой json.

ответ

1
hamster = Hamster.vector() 
=> [] #is empty 

Hamster.vector() возвращает одноэлементный экземпляр (EmptyVector) из Hamster::Vector класса.

[] отображается как выход, потому что Enumerable#reduce отменен хомяком.

levels, root и size являются переменными экземпляра класса Hamster::Vector, которые инициализированы в Hamster::Vector#initialize методом.

Итак, когда вы hamster.to_json вы видите выход в

=> "{\"levels\":0,\"root\":[],\"size\":0}" 

Используйте Hamster::Vector#empty? метод, чтобы проверить, если ваш hamster объект пуст? т.е. @Size == 0

hamster.to_json unless hamster.empty? 

Таким образом, если хомяк пустой объект не преобразовать его в формат JSON.

+0

спасибо за ваше объяснение –

+0

Рад помочь :) –

1

Лучшим решением будет hamster.to_a.to_json.

1

Текущая версия Hamster имеет функцию .to_ruby, которая пригодится.

Hamster::Vector[].to_json   # => "\"#<Hamster::Vector:0x0000000238b678>\"" 
Hamster.to_ruby(Hamster::Vector[]) # => [] 
Hamster.to_ruby(Hamster::Vector[]).to_json # => "[]" 

Вы можете прочитать больше о Hamster.to_ruby here.

Хорошо, что он работает на всех типах, определенных Hamster. Он также просто возвращает «nil», если переданный аргумент равен «nil».

Смежные вопросы