JSON secara langsung didukung di Ruby, dan telah setidaknya sejak Ruby v1.9.3, jadi tidak perlu menginstal permata kecuali Anda menggunakan sesuatu yang lebih tua. Cukup gunakan require 'json'dalam kode Anda.
the Tin Man
Jawaban:
560
Ini terlihat seperti JavaScript Object Notation (JSON) . Anda dapat menguraikan JSON yang berada di beberapa variabel, misalnya json_string, seperti:
require 'json'
JSON.parse(json_string)
Jika Anda menggunakan Ruby yang lebih lama, Anda mungkin perlu menginstal json gem .
Ada juga implementasi JSON untuk Ruby yang mungkin cocok dengan beberapa kasus penggunaan yang lebih baik:
Anda juga dapat menetapkan opsi symbolize_names menjadi true, untuk mendapatkan kunci sebagai simbol. Contoh:JSON.parse(string, symbolize_names: true) #=> {key: :value}
Nando Sousa
31
JSON secara langsung didukung di Ruby, dan telah setidaknya sejak Ruby v1.9.3, jadi tidak perlu menginstal permata kecuali Anda menggunakan sesuatu yang lebih tua. Cukup gunakan require 'json'dalam kode Anda.
the Tin Man
212
Hanya untuk sedikit memperluas jawaban dengan apa yang harus dilakukan dengan objek yang diuraikan:
# JSON Parsing example
require "rubygems"# don't need this if you're Ruby v1.9.3 or higher
require "json"
string ='{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
parsed = JSON.parse(string)# returns a hash
p parsed["desc"]["someKey"]
p parsed["main_item"]["stats"]["a"]# Read JSON from a file, iterate over objects
file = open("shops.json")
json = file.read
parsed = JSON.parse(json)
parsed["shop"].each do|shop|
p shop["id"]end
@LinusAn karena JSON membutuhkan tanda kutip ganda di sekitar string. Lihat string dalam definisi JSON ( json.org ): "Sebuah string adalah urutan dari nol atau lebih karakter Unicode, dibungkus dengan tanda kutip ganda, menggunakan backslash escapes."
endorama
1
Dalam banyak kasus Anda ingin membungkus JSON.parsedalam blok penyelamatan JSON::ParserError.
johnml
JSON.parse("[#{value}]")[0]untuk menghindari kesalahanA JSON text must at least contain two octets!
Rivenfall
39
Pada Ruby v1.9.3 Anda tidak perlu menginstal Permata apa pun untuk mem-parse JSON, cukup gunakan require 'json':
require 'json'
dalam kode Anda.Jawaban:
Ini terlihat seperti JavaScript Object Notation (JSON) . Anda dapat menguraikan JSON yang berada di beberapa variabel, misalnya
json_string
, seperti:Jika Anda menggunakan Ruby yang lebih lama, Anda mungkin perlu menginstal json gem .
Ada juga implementasi JSON untuk Ruby yang mungkin cocok dengan beberapa kasus penggunaan yang lebih baik:
sumber
JSON.parse(string, symbolize_names: true) #=> {key: :value}
require 'json'
dalam kode Anda.Hanya untuk sedikit memperluas jawaban dengan apa yang harus dilakukan dengan objek yang diuraikan:
sumber
'{ "a": "bob" }'
valid."{ 'a': 'bob' }"
tidak.JSON.parse
dalam blok penyelamatanJSON::ParserError
.JSON.parse("[#{value}]")[0]
untuk menghindari kesalahanA JSON text must at least contain two octets!
Pada Ruby v1.9.3 Anda tidak perlu menginstal Permata apa pun untuk mem-parse JSON, cukup gunakan
require 'json'
:Lihat JSON di Ruby-Doc.
sumber
Sepertinya string JSON. Anda dapat menggunakan salah satu dari banyak perpustakaan JSON dan itu sesederhana melakukan:
sumber
Ini agak terlambat tetapi saya menemukan sesuatu yang menarik yang tampaknya penting untuk disumbangkan.
Saya tidak sengaja menulis kode ini, dan sepertinya berhasil:
Saya terkejut melihatnya berfungsi karena saya menggunakan perpustakaan YAML, tetapi berhasil.
Alasan mengapa hal ini penting adalah karena sudah
yaml
ada bawaan dengan Ruby sehingga tidak ada pemasangan permata.Saya menggunakan versi 1.8.x dan 1.9.x - jadi
json
pustaka tidak dibangun, tetapi dalam versi 2.x.Jadi secara teknis - ini adalah cara termudah untuk mengekstrak data dalam versi yang lebih rendah dari 2.0.
sumber
Data itu terlihat seperti itu dalam format JSON.
Anda bisa menggunakan implementasi JSON ini untuk Ruby untuk mengekstraknya.
sumber
Saya menyarankan Oj karena waaaaaay lebih cepat dari perpustakaan JSON standar.
https://github.com/ohler55/oj
( lihat perbandingan kinerja di sini )
sumber