Konwerter JSON na Ruby Hash Online
Konwertuj JSON do Ruby Hash, Struct lub OpenStruct. Bezplatnie, w Twojej przegladarce, bez wgrywania plikow.
{
name: "John",
age: 30,
active: true,
tags: [
"ruby",
"rails"
],
address: {
city: "Tokyo",
zip: "100-0001"
}
}Co mozesz zrobic
JSON do Ruby: idiomatyczny Hash, Struct i OpenStruct
Wiele formatow
Hash z symbolami, Hash ze stringami, Struct.new lub OpenStruct - w zaleznosci od wzorca uzycia w Ruby lub Rails.
100% prywatne
Konwersja odbywa sie w Twojej przegladarce za pomoca JavaScript. Twoj kod nigdy nie opuszcza Twojego urzadzenia.
Idiomatyczny Ruby
Wygenerowany kod zgodny z konwencjami Ruby 3.x i przewodnikiem stylu RuboCop.
Natychmiastowe
Konwersja w czasie rzeczywistym podczas pisania. Bez przyciskow, bez czekania.
Jak to działa
Trzy kroki, żadnych komplikacji
Wklej swoj JSON
Wprowadz dowolny prawidlowy obiekt JSON: prosty, zagniezdony, z tablicami lub zlozoynymi polami. Walidacja odbywa sie w czasie rzeczywistym w Twojej przegladarce.
Wybierz typ wyjscia
Wybierz Hash z kluczami symbolicznymi, Hash z kluczami stringowymi, Struct.new lub OpenStruct w zaleznosci od Twojego wzorca uzycia w kodzie Ruby lub Rails.
Skopiuj kod Ruby
Otrzymaj idiomatyczny kod Ruby gotowy do wklejenia do swojego projektu, z prawidlowa składnia dla uzytej wersji Ruby (2.7+ lub 3.x).
FAQ
Masz pytania?
To zalezy od kontekstu uzycia w Twoim kodzie Ruby. Klucze symboliczne (:name, :age) to dominujacy wzorzec w idiomatycznym Ruby z kilku powodow: symbole sa niezmienne i unikalne w pamieci (Ruby utrzymuje globalną tablice symboli, wiec :name jest zawsze tym samym obiektem w trakcie calej sesji), co czyni je bardziej wydajnymi dla kluczy Hash uzywanych wielokrotnie. Nowoczesna skladnia Ruby (od 1.9) z { name: value } (składnia dwukropka) jest czystsza i bardziej czytelna niz hashrocket { :name => value }. Frameworki jak Rails uzywaja symboli w calym swoim wewnetrznym API (params[:user_id], session[:user], flash[:notice]). Z drugiej strony klucze stringowe ('name', 'age') sa przydatne, gdy dane pochodza z zewnetrznego JSON i sa manipulowane bez konwersji, gdy klucze zawieraja znaki nieprawidlowe dla symboli (myslniki, spacje, kropki) lub gdy uzywasz HashWithIndifferentAccess ActiveSupport, ktory akceptuje oba typy kluczy wymiennie.
Hash to najbardziej elastyczna struktura danych i domyslny wybor dla danych JSON w Ruby. Hash nie ma stalego schematu: mozesz dodawac i usuwac klucze dynamicznie. Jest idealny dla danych konfiguracyjnych, odpowiedzi API o zmiennej strukturze i danych, ktore roznia sie w strukturze. Struct.new(:pole1, :pole2) tworzy klase ze stalymi atrybutami i dostepem przez metody (object.pole1 zamiast object[:pole1]). Struktury sa szybsze od OpenStruct, zajmuja mniej pamieci, sa porownywalne wedlug wartosci i to dobry wybor, gdy znasz dokladna strukture danych w czasie projektowania. OpenStruct (z biblioteki standardowej ostruct) akceptuje dynamiczne atrybuty jak Hash, ale z dostepem w stylu metod. Jest wygodny do szybkiego prototypowania, ale ma istotne kary wydajnosciowe: w testach porownawczych OpenStruct jest 10-50x wolniejszy od Hash przy dostepie do atrybutow w Ruby 2.x, choc Ruby 3.x znacznie poprawil implementacje.
Ruby wlacza biblioteke json w swojej bibliotece standardowej od Ruby 1.9 (2007). Nie jest wymagana instalacja dodatkowego gema. Podstawowe uzycie: require 'json'; data = JSON.parse(json_string). Domyslnie JSON.parse zwraca Hash z kluczami stringowymi (takimi samymi jak w oryginalnym JSON). Aby uzyskac klucze symboliczne, uzyj JSON.parse(json_string, symbolize_names: true). Opcja symbolize_names rekurencyjnie konwertuje wszystkie klucze stringowe na symbole, w tym klucze w zagniezdonych obiektach. Do generowania JSON z Ruby: JSON.generate(object) lub object.to_json (metoda dodana przez biblioteke json do Hash, Array i typow prymitywnych). W JRuby i TruffleRuby implementacja JSON uzywa lezacego w podstawach srodowiska uruchomieniowego Java.
Tak, i sa wazne dla kodu produkcyjnego. OpenStruct ma trzy glowne kary wydajnosciowe: (1) Tworzenie: tworzenie instancji OpenStruct jest kosztowniejsze niz tworzenie Hash, poniewaz dynamicznie definiuje metody dostepu dla kazdego atrybutu za pomoca define_method. (2) Dostep: dostep do atrybutu OpenStruct (object.name) jest wolniejszy niz dostep do Hash (hash[:name]). (3) Pamiec: kazda instancja OpenStruct ma dodatkowy narzut nad Hash. W Ruby 2.7 i wczesniejszych testach porownawczych wykazaly OpenStruct 10-50x wolniejszy od Hash. Ruby 3.0 wprowadzil znaczne ulepszenia OpenStruct redukujac te roznice, ale OpenStruct wciaz jest wolniejszy od Hash i Struct przy intensywnym dostepie. Oficjalna rekomendacja Ruby 3.x brzmi: preferuj Struct nad OpenStruct, gdy schemat jest znany. Jezeli potrzebujesz dostep w stylu metod ze stalym schematem i dobra wydajnoscia, uzyj Struct; jezeli potrzebujesz elastycznosci do prototypowania, uzyj OpenStruct ze swiadomoscia kosztu wydajnosciowego.
ActiveSupport::HashWithIndifferentAccess (HWIA) to podklasa Hash wlaczona w Rails (i dostepna jako gem activesupport bez pelnego Rails), ktora pozwala na dostep do kluczy wymiennie przez string lub symbol. To typ, ktorego Rails uzywa dla params: params[:user_id] i params['user_id'] zwracaja ta sama wartosc. Aby zaladowac zewnetrzny JSON w Rails z indyferentnym dostepem: json_data = JSON.parse(response_body).with_indifferent_access. Metoda with_indifferent_access jest dostepna dla Hash przez ActiveSupport. W Rails 7.x, ActionController::Parameters (obiekt params) implementuje semantyke podobna do HWIA, ale z dodatkowymi ograniczeniami bezpieczenstwa (requires i permits dla Strong Parameters).
Ruby 2.3 wprowadzil pragma # frozen_string_literal: true, ktora zamraza wszystkie literaly stringow w pliku, czyniajac je niezmiennymi i wspoldzielonymi w pamieci (podobnie jak symbole sa unikalne). Ruby 3.x kontynuuje promowanie tej praktyki, a w planie dzialania Ruby 4.0 omawiane jest domyslne jej wlaczenie. Wplyw na kod generowany z kluczami stringowymi dla Hash jest nastepujacy: przy aktywnym frozen_string_literal, klucze stringowe sa automatycznie zamrazane, co jest wydajne pamieci. Jednak jezeli kod probuje mutowac klucz string (konkatenowac, gsub!, itp.) w pliku z frozen_string_literal, zostanie wywolany FrozenError w czasie wykonywania. Dla kodu przetwarzajacego JSON z kluczami stringowymi w plikach z frozen_string_literal jest to rzadko problem, poniewaz klucze Hash sa zazwyczaj niemutowane. Rekomendacja dla nowoczesnych projektow na Ruby 3.x: wlacz # frozen_string_literal: true we wszystkich plikach i uzywaj kluczy symbolicznych w Hash we wlasnym kodzie dla maksymalnej wydajnosci.
Konwertuj JSON do Ruby Hash, Struct i OpenStruct: przewodnik techniczny
Konwersja JSON do struktur danych Ruby to fundamentalna operacja w tworzeniu backendu z Ruby i Ruby on Rails. JSON (JavaScript Object Notation, RFC 7159, zaktualizowany w RFC 8259 w 2017 roku) uzywa modelu danych, ktory bezposrednio odwzorowuje na typy prymitywne Ruby: obiekty JSON konwertuja sie do Hash, tablice JSON do Array, stringi do String, liczby do Integer lub Float, wartosci logiczne do true/false, a null do nil. Jednak decyzja o tym, jakiego typu Hash uzywac (z kluczami symbolicznymi lub stringowymi) i czy uzywac Hash, Struct czy OpenStruct ma wazne implikacje dla wydajnosci, czytelnosci i utrzymywalnosci wynikowego kodu Ruby. Składnia Hash w Ruby ewoluowala znacznie przez kolejne wersje jezyka. Ruby 1.8 i wczesniejsze obslugiwaly tylko składnie hashrocket: { :key => value }. Ruby 1.9 (2007) wprowadzil składnie dwukropka dla kluczy symbolicznych: { key: value }. Ruby 3.1 (2021) rozszerzyl składnie dwukropka, aby umozliwic klucze stringowe i zmienne. RuboCop, de facto analizator statyczny kodu Ruby, rekomenduje uzywanie składni dwukropka ({ key: value }), gdy wszystkie klucze sa symbolami.
Struct w Ruby to klasa generujaca klasy: Struct.new(:name, :age) tworzy nowa anonimowa klase (lub nazwana jezeli przypisana do stalej) z definicja atrybutow, metodami dostepu (gettery i settery), porownywaniem wartosci (==) i metodami konwersji jak to_a i to_h. Od Ruby 2.5, Struct.new akceptuje blok, w ktorym mozna definiowac dodatkowe metody. Od Ruby 3.2, Struct.new z keyword_init: true pozwala na inicjalizacje z kwargs: Person.new(name: 'Ana', age: 30) zamiast Person.new('Ana', 30). Struktury w Ruby sa szeroko uzywane dla Value Objects (obiektow reprezentujacych wartosci konceptualne bez wlasnej tozsamosci, takich jak punkt geometryczny, zakres dat lub adres pocztowy) i dla Data Transfer Objects (DTO) w aplikacjach podazajacych za wzorcami czystej architektury. OpenStruct (biblioteka standardowa ostruct, require 'ostruct') to klasa pozwalajaca na tworzenie obiektow z dynamicznymi atrybutami zdefiniowanymi w konstruktorze: person = OpenStruct.new(name: 'Ana', age: 30); person.name #=> 'Ana'. OpenStruct jest szczegolnie popularny do pisania testowych podwojen, stubow i fikstur w testach RSpec i Minitest.
W kontekscie Ruby on Rails, integracja JSON jest wszechobecna. Odpowiedzi z zewnetrznych API (REST lub GraphQL) sa parsowane za pomoca JSON.parse, params z zadan POST z Content-Type application/json sa automatycznie parsowane przez ActionDispatch i dostepne jako ActionController::Parameters. Dla serializowania modeli ActiveRecord do JSON, Rails wlacza metode as_json, ktora akceptuje opcje takie jak only:, except:, include: dla asocjacji i methods: dla wirtualnych metod. Gem jbuilder (wlaczony domyslnie w Rails) pozwala budowac odpowiedzi JSON za pomoca Ruby DSL. Gem jsonapi-serializer (bazujacy na fast_jsonapi Netflix) oferuje serializacje modeli do JSON:API, najszerzej uzytkownego standardu REST API w ekosystemie Rails. Dla konwersji JSON do obiektow Ruby z walidacja typow i przymusem w nowoczesnych projektach Ruby (2022-2025), najczesciej uzywane gemy to: dry-struct (z rodziny dry-rb) definiujacy typy z automatycznym przymusem i walidacja schematu; Sorbet z T::Struct do typowania statycznego w czasie wykonywania; i ActiveModel::Attributes w Rails, ktory pozwala definiowac typowane atrybuty w modelach non-ActiveRecord.