Saya memiliki objek JSON yang memegang nilai berikut:
@value = {"val":"test","val1":"test1","val2":"test2"}
Saya ingin mengulanginya di Ruby untuk mendapatkan pasangan kunci / nilai. Ketika saya menggunakan @each
, itu tidak melakukan iterasi melalui objek karena tidak dalam bentuk hash Ruby:
@value = {"val"=>"test","val1"=>"test1","val2"=>"test2"}
Bagaimana cara mengonversi objek JSON di atas menjadi hash Ruby?
value = '{"val":"test","val1":"test1","val2":"test2"}'
bisa lebih mudah dibaca.Anda juga dapat menggunakan
with_indifferent_access
metode Rails sehingga Anda dapat mengakses body dengan simbol atau string.value = '{"val":"test","val1":"test1","val2":"test2"}' json = JSON.parse(value).with_indifferent_access
kemudian
json[:val] #=> "test" json["val"] #=> "test"
sumber
Dengan asumsi Anda memiliki hash JSON yang berkeliaran di suatu tempat, untuk secara otomatis mengubahnya menjadi sesuatu seperti versi WarHog, bungkus konten hash JSON Anda dalam
%q{hsh}
tag.Ini tampaknya secara otomatis menambahkan semua teks lolos yang diperlukan seperti dalam jawaban WarHog.
sumber
Sudahkah Anda mencoba: http://flori.github.com/json/ ?
Jika gagal, Anda bisa menguraikannya? Jika itu hanya array yang Anda minati, sesuatu untuk membagi di atas akan sangat sederhana.
sumber
Saya terkejut tidak ada yang menunjukkan
[]
metode JSON , yang membuatnya sangat mudah dan transparan untuk mendekode dan menyandikan dari / ke JSON.Pertimbangkan ini:
require 'json' hash = {"val":"test","val1":"test1","val2":"test2"} # => {:val=>"test", :val1=>"test1", :val2=>"test2"} str = JSON[hash] # => "{\"val\":\"test\",\"val1\":\"test1\",\"val2\":\"test2\"}"
str
sekarang berisi JSON yang dikodekanhash
.Mudah untuk membalikkannya menggunakan:
JSON[str] # => {"val"=>"test", "val1"=>"test1", "val2"=>"test2"}
Objek khusus perlu
to_s
ditentukan untuk kelas, dan di dalamnya mengubah objek menjadi Hash kemudian digunakanto_json
di atasnya.sumber
Anda dapat menggunakan permata nice_hash: https://github.com/MarioRuiz/nice_hash
require 'nice_hash' my_string = '{"val":"test","val1":"test1","val2":"test2"}' # on my_hash will have the json as a hash, even when nested with arrays my_hash = my_string.json # you can filter and get what you want even when nested with arrays vals = my_string.json(:val1, :val2) # even you can access the keys like this: puts my_hash._val1 puts my_hash.val1 puts my_hash[:val1]
sumber