Я пытаюсь сделать веб-сервис с помощью Ruby Sinatra и MongoDB. Он вернет объекты JSON. Я решил использовать MongoDB, частично, потому что он хранит документы внутри структуры «JSON-like». Я думал, что это облегчит мне выполнение запроса и отправку результата JSON клиенту. Тем не менее, у меня возникли проблемы с преобразованием результатов от MongoDB в JSON.В Ruby MongoDB возвращает BSON :: OrderedHash. Как преобразовать его в JSON? Использование to_json дает ошибку «слишком высокий уровень стека»
MongoDB find_one() возвращает BSON :: OrderedHash. Из documentation кажется, что это должно вести себя подобно типу Ruby's Hash. Когда я пытаюсь преобразовать его в JSON с помощью функции .to_json, я получаю ошибку «слишком высокий уровень стека». Попытка конвертировать одинаковые работы просто прекрасна.
Этот код работает как я хотел бы ожидать:
require "json"
my_hash = Hash.new
my_hash[ "a" ] = "aaa"
my_hash[ "b" ] = 9
puts my_hash.to_json
Этот код производит `to_json ': уровень стека слишком глубоко (SystemStackError):
require "json"
require "bson"
my_bson = BSON::OrderedHash.new
my_bson[ "a" ] = "aaa"
my_bson[ "b" ] = 9
puts my_bson.to_json
Попытка преобразовать в хэш-первых, не сделал Помогите. Такая же ошибка.
puts my_bson.to_hash.to_json
Почему я получаю слишком высокий уровень стека? Это простой хеш. Легко ли преобразовать результаты MongoDB в JSON? Я не хочу писать функцию преобразования, специфичную для моих данных. Это наносит ущерб точке базы данных schemaless.
Хе. Сначала я подумал, что «BSON» в названии - опечатка. Узнавайте что-то новое каждый день. – Matchu
Ваши примеры работают с моей текущей настройкой в irb. У меня есть ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux], irb 0.9.5 (05/04/13), bson (1.0.1), bson_ext (1.0.1). Выполняется ли ошибка с обычными bsons или только с теми, которые получены из базы данных MongoDB? – ponzao
Мне не удалось получить bson_ext для сборки на моей системе, поэтому я просто использую bson. Вы можете попробовать без bson_ext? Может быть, это объясняет разницу? Кто-нибудь знает, есть ли доступная двоичная версия bson_ext для Windows, чтобы я мог избежать боли, пытаясь ее построить? –