Bagaimana cara mengubah objek hash ruby ​​ke JSON?

340

Bagaimana cara mengubah objek hash ruby ​​ke JSON? Jadi saya mencoba contoh ini di bawah & tidak berhasil?

Saya sedang melihat RubyDoc dan Hashobjek jelas tidak memiliki to_jsonmetode. Tetapi saya membaca di blog yang Rails mendukung active_record.to_jsondan juga mendukung hash#to_json. Saya bisa mengerti ActiveRecordadalah objek Rails, tetapi Hashbukan asli Rails, itu objek Ruby murni. Jadi di Rails Anda bisa melakukan hash.to_json, tetapi tidak di Ruby murni ??

car = {:make => "bmw", :year => "2003"}
car.to_json
kapso
sumber

Jawaban:

563

Salah satu dari banyak keistimewaan Ruby adalah kemungkinan untuk memperluas kelas yang ada dengan metode Anda sendiri. Itu disebut "kelas dibuka kembali" atau tambalan-monyet (arti yang terakhir dapat bervariasi , meskipun).

Jadi, lihat di sini:

car = {:make => "bmw", :year => "2003"}
# => {:make=>"bmw", :year=>"2003"}
car.to_json
# NoMethodError: undefined method `to_json' for {:make=>"bmw", :year=>"2003"}:Hash
#   from (irb):11
#   from /usr/bin/irb:12:in `<main>'
require 'json'
# => true
car.to_json
# => "{"make":"bmw","year":"2003"}"

Seperti yang Anda lihat, mengharuskan jsonsecara ajaib membawa metode to_jsonke kami Hash.

Mladen Jablanović
sumber
2
yang bisa saya katakan adalah wow :) juga terima kasih banyak !! jadi pada dasarnya saya bisa memperpanjang kelas json secara dinamis ??
kapso
1
Saya mencoba hal yang sama dengan objek Ruby dan tidak berhasil ?? >> membutuhkan 'json' => true >> class Person >> attr_accessor: fname,: lname >> end => nil >> p = Person.new => # <Person: 0x101155f70> >> p.fname = "Bill "=>" Bill ">> p.lname =" Shine "=>" Shine ">> p.to_json =>" \ "# <Orang: 0x101155f70> \" "
kapso
10
Tidak, tidak, seseorang harus memberi kode bagaimana objek kelas sewenang-wenang harus diserialisasi ke JSON. Mereka melakukannya untuk Hashdan Arraykelas dalam jsonpermata, tetapi kelas Anda Personhanya polos Object. Tapi Anda bisa mewarisi Hash. Anda dapat membuka pertanyaan baru jika tidak berhasil.
Mladen Jablanović
Terima kasih. inilah pertanyaan baru, bantuan apa pun akan dihargai. Terima kasih. stackoverflow.com/questions/3226054/…
kapso
Anda menunjukkan apa yang tampak sebagai tipe keluaran IRB. Saya mencoba untuk mendapatkan hash # to_json bekerja untuk objek DateTime. Berkat posting ini, saya mengerti. Tetapi saya melakukan inspeksi dengan p date_json Inilah yang saya dapatkan untuk string sejati "{\" tahun \ ": 2013, \" mon \ ": 7, \" mday \ ": 16, \" jam \ ": 13, \ "min \": 54, \ "sec \": 32, \ "zone \": \ "- 05:00 \", \ "offset \": - 18000} "sehingga Anda dapat melihat bahwa ia membuat simbol kunci sebagai string dan tentu saja data tidak berubah. Terima kasih lagi. Maaf saya sangat terlambat.
Douglas G. Allen
19
require 'json/ext' # to use the C based extension instead of json/pure

puts {hash: 123}.to_json
nurettin
sumber
6

Anda juga dapat menggunakan JSON.generate:

require 'json'

JSON.generate({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

Atau aliasnya JSON.unparse:

require 'json'

JSON.unparse({ foo: "bar" })
=> "{\"foo\":\"bar\"}"
Vinicius Brasil
sumber
3

Tambahkan baris berikut di bagian atas file Anda

require 'json'

Maka Anda dapat menggunakan:

car = {:make => "bmw", :year => "2003"}
car.to_json

Atau, Anda dapat menggunakan:

JSON.generate({:make => "bmw", :year => "2003"})
Apurv Pandey
sumber
-1

Anda harus memasukkan jsondalam file Anda

Sebagai contoh,

require 'json'

your_hash = {one: "1", two: "2"}
your_hash.to_json

Untuk pengetahuan lebih lanjut tentang jsonAnda dapat mengunjungi tautan di bawah ini. Belajar Json

Foram Thakral
sumber