Próbuję utworzyć usługę sieciową przy użyciu Ruby Sinatra i MongoDB. Zwróci obiekty JSON. Zdecydowałem się po części użyć MongoDB, ponieważ przechowuje on dokumenty wewnętrznie w strukturze "podobnej do JSON". Pomyślałem, że to ułatwi mi uruchomienie zapytania i wysłanie wyniku JSON do klienta. Jednak mam problemy z konwersją wyników z MongoDB na JSON.W Rubim, MongoDB zwraca BSON :: OrderedHash. Jak przekonwertować go na JSON? Używanie to_json daje błąd "zbyt dużego poziomu stosu"
MongoDB's find_one() zwraca BSON :: OrderedHash. Od documentation wydaje się, że powinno to wyglądać podobnie do typu Hash Rubiego. Kiedy próbuję przekonwertować go do JSON za pomocą funkcji .to_json, otrzymuję błąd "zbyt dużo poziomów stosu". Próba przekonwertowania identycznych utworów jest w porządku.
Ten kod działa jak bym się spodziewał:
require "json"
my_hash = Hash.new
my_hash[ "a" ] = "aaa"
my_hash[ "b" ] = 9
puts my_hash.to_json
Ten kod generuje `to_json ': poziom stosu zbyt głębokie (SystemStackError):
require "json"
require "bson"
my_bson = BSON::OrderedHash.new
my_bson[ "a" ] = "aaa"
my_bson[ "b" ] = 9
puts my_bson.to_json
próbujesz konwertować do mieszania najpierw nie Wsparcie. Ten sam błąd.
puts my_bson.to_hash.to_json
Dlaczego otrzymuję zbyt duży błąd poziomu stosu? To jest prosty hasz. Czy można łatwo przekonwertować wyniki MongoDB na JSON? Nie chcę pisać funkcji konwersji, która jest specyficzna dla moich danych. To pokonuje punkt, w którym znajduje się baza danych bez schematów.
He. Na początku myślałem, że "BSON" w tytule to literówka. Naucz się czegoś nowego każdego dnia. – Matchu
Twoje przykłady działają z moją obecną konfiguracją w irb. Mam 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). Czy błąd dotyczy zwykłych bsonów, czy tylko tych, które zostały pobrane z bazy danych MongoDB? – ponzao
Nie byłem w stanie uzyskać bson_ext do zbudowania na moim systemie, więc używam tylko basha. Możesz spróbować bez bson_ext? Może to wyjaśnia różnicę? Czy ktoś wie, czy jest dostępna binarna wersja bson_ext systemu Windows, więc mogę uniknąć bólu, próbując go zbudować? –