Konversi JSON ke Ruby Hash Online
Konversi JSON ke Ruby Hash, Struct, atau OpenStruct. Gratis, di browser Anda, tanpa mengunggah file.
{
name: "John",
age: 30,
active: true,
tags: [
"ruby",
"rails"
],
address: {
city: "Tokyo",
zip: "100-0001"
}
}Yang dapat Anda lakukan
JSON ke Ruby: Hash, Struct, dan OpenStruct yang idiomatik
Beberapa format
Hash dengan symbol, Hash dengan string, Struct.new, atau OpenStruct tergantung pola penggunaan Anda di Ruby atau Rails.
100% privat
Konversi berlangsung di browser Anda dengan JavaScript. Kode Anda tidak pernah meninggalkan perangkat Anda.
Ruby idiomatik
Kode yang dihasilkan mengikuti konvensi Ruby 3.x dan panduan gaya RuboCop.
Instan
Konversi real-time saat Anda mengetik. Tanpa tombol, tanpa menunggu.
Cara kerjanya
Tiga langkah, tanpa kerumitan
Tempel JSON Anda
Masukkan objek JSON yang valid: sederhana, bersarang, dengan array atau field kompleks. Validasi terjadi secara real-time di browser Anda.
Pilih jenis output
Pilih Hash dengan symbol key, Hash dengan string key, Struct.new, atau OpenStruct tergantung pada pola penggunaan Anda dalam kode Ruby atau Rails.
Salin kode Ruby
Dapatkan kode Ruby yang idiomatik siap ditempel ke proyek Anda, dengan sintaks yang benar untuk versi Ruby yang Anda gunakan (2.7+ atau 3.x).
FAQ
Ada pertanyaan?
Tergantung pada konteks penggunaan dalam kode Ruby Anda. Symbol key (:name, :age) adalah pola dominan dalam Ruby idiomatik karena beberapa alasan: symbol bersifat immutable dan unik dalam memori (Ruby mempertahankan tabel symbol global, sehingga :name selalu merupakan objek yang sama sepanjang sesi), menjadikannya lebih efisien sebagai Hash key yang digunakan berulang kali. Sintaks Ruby modern (sejak 1.9) dengan { name: value } lebih bersih dan mudah dibaca. Framework seperti Rails menggunakan symbol di seluruh API internalnya (params[:user_id], session[:user], flash[:notice]). Di sisi lain, string key ('name', 'age') berguna ketika data berasal dari JSON eksternal dan dimanipulasi tanpa konversi, atau ketika menggunakan HashWithIndifferentAccess dari ActiveSupport yang menerima kedua jenis key secara bergantian.
Hash adalah struktur data paling fleksibel dan pilihan default untuk data JSON dalam Ruby. Hash tidak memiliki schema tetap: Anda dapat menambah dan menghapus key secara dinamis. Ideal untuk data konfigurasi, respons API dengan struktur variabel, dan data apa pun yang strukturnya berubah-ubah. Struct.new(:field1, :field2) membuat kelas dengan atribut tetap dan akses melalui metode (object.field1 daripada object[:field1]). Struct lebih cepat dari OpenStruct, menggunakan lebih sedikit memori, dapat dibandingkan berdasarkan nilai, dan merupakan pilihan yang baik ketika Anda mengetahui struktur data yang tepat pada waktu desain. OpenStruct (dari pustaka standar ostruct) menerima atribut dinamis seperti Hash tetapi dengan akses bergaya metode. Ini nyaman untuk prototipe cepat tetapi memiliki penalti performa yang signifikan: dalam benchmark, OpenStruct 10-50x lebih lambat dari Hash untuk akses atribut dalam Ruby 2.x, meskipun Ruby 3.x secara signifikan meningkatkan implementasinya.
Ruby menyertakan pustaka json dalam pustaka standarnya sejak Ruby 1.9 (2007). Tidak diperlukan instalasi gem tambahan. Penggunaan dasar: require 'json'; data = JSON.parse(json_string). Secara default, JSON.parse mengembalikan Hash dengan string key (sama seperti dalam JSON asli). Untuk mendapatkan symbol key, gunakan JSON.parse(json_string, symbolize_names: true). Opsi symbolize_names secara rekursif mengonversi semua string key menjadi symbol, termasuk key dalam objek bersarang. Untuk menghasilkan JSON dari Ruby: JSON.generate(object) atau object.to_json (metode yang ditambahkan oleh pustaka json ke Hash, Array, dan tipe primitif). Gem json_pure adalah implementasi Ruby murni; gem json (disertakan secara default dalam MRI Ruby/CRuby) menggunakan ekstensi C untuk performa yang lebih baik.
Ya, dan penting untuk kode produksi. OpenStruct memiliki tiga penalti performa utama: (1) Pembuatan: membuat instance OpenStruct lebih mahal karena mendefinisikan metode accessor secara dinamis untuk setiap atribut menggunakan define_method. (2) Akses: mengakses atribut OpenStruct (object.name) lebih lambat dari mengakses Hash (hash[:name]) karena melalui method_missing atau metode yang didefinisikan secara dinamis. (3) Memori: setiap instance OpenStruct memiliki overhead tambahan dibandingkan Hash. Dalam Ruby 2.7 dan sebelumnya, benchmark menunjukkan OpenStruct 10-50x lebih lambat dari Hash. Ruby 3.0 memperkenalkan peningkatan signifikan pada OpenStruct (implementasi ditulis ulang dalam C) yang mengurangi kesenjangan, tetapi OpenStruct masih lebih lambat dari Hash dan Struct untuk akses intensif. Rekomendasi resmi Ruby 3.x adalah: lebih pilih Struct daripada OpenStruct ketika schema diketahui. Jika Anda membutuhkan akses bergaya metode dengan schema tetap dan performa yang baik, gunakan Struct.
ActiveSupport::HashWithIndifferentAccess (HWIA) adalah subkelas Hash yang disertakan dalam Rails yang memungkinkan mengakses key secara bergantian menggunakan string atau symbol. Ini adalah jenis yang Rails gunakan untuk params: params[:user_id] dan params['user_id'] mengembalikan nilai yang sama. Untuk memuat JSON eksternal di Rails dengan akses tak terdiferensiasi: json_data = JSON.parse(response_body).with_indifferent_access. Metode with_indifferent_access tersedia pada Hash melalui ActiveSupport. Di Rails 7.x, ActionController::Parameters (objek params) mengimplementasikan semantik yang mirip HWIA tetapi dengan batasan keamanan tambahan (memerlukan requires dan permits untuk Strong Parameters).
Ruby 2.3 memperkenalkan pragma # frozen_string_literal: true yang membekukan semua string literal dalam file, menjadikannya immutable dan dibagikan dalam memori (mirip dengan bagaimana symbol bersifat unik). Ruby 3.x terus mempromosikan praktik ini dan dalam peta jalan Ruby 4.0, mengaktifkannya secara default sedang didiskusikan. Dampak pada kode yang dihasilkan dengan string key untuk Hash adalah: dengan frozen_string_literal aktif, string key secara otomatis dibekukan, yang efisien dari segi memori. Namun, jika kode mencoba memutasi string key (gabung, gsub!, dan sebagainya) dalam file dengan frozen_string_literal, FrozenError akan dimunculkan saat runtime. Untuk kode yang memproses JSON dengan string key dalam file dengan frozen_string_literal, ini jarang menjadi masalah karena Hash key umumnya tidak dimutasi. Rekomendasi untuk proyek modern di Ruby 3.x adalah menyertakan # frozen_string_literal: true di semua file dan menggunakan symbol key dalam Hash pada kode Anda sendiri untuk efisiensi maksimum.
Konversi JSON ke Ruby Hash, Struct, dan OpenStruct: panduan teknis
Mengonversi JSON ke struktur data Ruby adalah operasi fundamental dalam pengembangan backend dengan Ruby dan Ruby on Rails. JSON (JavaScript Object Notation, RFC 7159, diperbarui dalam RFC 8259 pada 2017) menggunakan model data yang dipetakan langsung ke tipe primitif Ruby: objek JSON dikonversi ke Hash, array JSON ke Array, string ke String, angka ke Integer atau Float, boolean ke true/false, dan null ke nil. Namun, keputusan jenis Hash mana yang akan digunakan (dengan symbol key atau string key) dan apakah akan menggunakan Hash, Struct, atau OpenStruct memiliki implikasi penting untuk performa, keterbacaan, dan kemudahan pemeliharaan kode Ruby yang dihasilkan. Sintaks Hash dalam Ruby telah berevolusi secara signifikan di berbagai versi bahasa. Ruby 1.8 dan sebelumnya hanya mendukung sintaks hashrocket: { :key => value }. Ruby 1.9 (2007) memperkenalkan sintaks titik dua untuk symbol key: { key: value }, yang setara dengan { :key => value } tetapi lebih ringkas. Ruby 3.1 (2021) memperluas sintaks titik dua untuk memungkinkan string key dan variabel.
Struct dalam Ruby adalah kelas yang menghasilkan kelas: Struct.new(:name, :age) membuat kelas anonim baru dengan atribut yang didefinisikan, metode accessor (getter dan setter), perbandingan nilai (==), dan metode konversi seperti to_a dan to_h. Sejak Ruby 2.5, Struct.new menerima blok di mana metode tambahan dapat didefinisikan. Sejak Ruby 3.2, Struct.new dengan keyword_init: true memungkinkan inisialisasi dengan kwargs: Person.new(name: 'Ana', age: 30) daripada Person.new('Ana', 30). Struct dalam Ruby banyak digunakan untuk Value Objects dan Data Transfer Objects (DTO) dalam aplikasi yang mengikuti pola clean architecture. OpenStruct (pustaka standar ostruct, require 'ostruct') adalah kelas yang memungkinkan membuat objek dengan atribut dinamis yang didefinisikan dalam konstruktor. OpenStruct sangat populer untuk menulis test double, stub, dan fixture dalam uji RSpec dan Minitest: OpenStruct.new(id: 1, name: 'Test') adalah cara cepat membuat objek palsu untuk pengujian tanpa mengimplementasikan kelas penuh.
Dalam konteks Ruby on Rails, integrasi JSON ada di mana-mana. Respons dari API eksternal (REST atau GraphQL) diurai dengan JSON.parse, params dari permintaan POST dengan Content-Type application/json secara otomatis diurai oleh ActionDispatch dan tersedia sebagai ActionController::Parameters (yang bekerja seperti HashWithIndifferentAccess dengan Strong Parameters). Untuk menserialisasi model ActiveRecord ke JSON, Rails menyertakan metode as_json yang menerima opsi seperti only:, except:, include: untuk asosiasi, dan methods: untuk metode virtual. Gem jbuilder (disertakan secara default di Rails) memungkinkan membangun respons JSON dengan DSL Ruby. Gem ActiveModelSerializers dan jsonapi-serializer yang lebih baru menawarkan serialisasi model ke JSON:API, standar REST API yang paling banyak digunakan dalam ekosistem Rails. Untuk mengonversi JSON ke objek Ruby dengan validasi tipe dan coercion dalam proyek Ruby modern (2022-2025), gem yang paling banyak digunakan adalah: dry-struct (dari keluarga dry-rb); Sorbet dengan T::Struct untuk pengetikan statis saat runtime; dan ActiveModel::Attributes di Rails yang memungkinkan mendefinisikan atribut bertipe dalam model non-ActiveRecord.