JSON dosyasına doğru formatta nasıl yazılır


111

Ruby'de bir karma oluşturuyorum ve bunu bir JSON dosyasına doğru biçimde yazmak istiyorum.

İşte kodum:

tempHash = {
    "key_a" => "val_a",
    "key_b" => "val_b"
}
fJson = File.open("public/temp.json","w")
fJson.write(tempHash)
fJson.close

Ve işte ortaya çıkan dosyanın içeriği:

key_aval_akey_bval_b

Sinatra (hangi sürümü bilmiyorum) ve Ruby v 1.8.7 kullanıyorum.

Bunu doğru JSON formatında dosyaya nasıl yazabilirim?


Bu SO cevabına bir göz atın: stackoverflow.com/questions/1684588/…
— Charlie Martin

Yaptığınız şey aslında kullandığım JSON ve YAML yapılarını belgelemek için çok kullandığım bir şey. YAML / JSON'u bir dosyaya kaydetmek için küçük bir kod parçası yazacağım, ardından verilerin dökümden ve yeniden yüklemeden önce ve / veya sonra nasıl görünmesi gerektiğini gösteren aynı yapıları oluşturacağım. Bu nedenle, kodunuz tam olarak doğru çalışmıyor olsa da, uzun vadede hayatı kolaylaştırdığı için bu işleme devam edin.
— The Tin Man

Yanıtlar:


177

JSON kitaplığını gerekli kılın ve kullanın to_json.

require 'json'
tempHash = {
    "key_a" => "val_a",
    "key_b" => "val_b"
}
File.open("public/temp.json","w") do |f|
  f.write(tempHash.to_json)
end

Temp.json dosyanız artık şöyle görünür:

{"key_a":"val_a","key_b":"val_b"}

3
Küçük iyileştirme: Blok şeklini öneriyorum:File.open(...){ |f| f << h.to_json }
— Phrogz

18
JSON.pretty_generate(tempHash)aynı zamanda rad ruby-doc.org/stdlib-1.9.3/libdoc/json/rdoc/…
— Connor Leech

95

Biçimlendirme ile

require 'json'
tempHash = {
    "key_a" => "val_a",
    "key_b" => "val_b"
}
File.open("public/temp.json","w") do |f|
  f.write(JSON.pretty_generate(tempHash))
end

Çıktı

{
    "key_a":"val_a",
    "key_b":"val_b"
}

1
"A +" seçeneğini beğendim. Mevcut verileri bozmaz.
— boulder_ruby

2
@boulder_ruby eklenmesi, yalnızca dosya formatı JSONlines (satır başına bir JSON nesnesi) pretty_generateise ve çıktının tüketicisi bir insan olmadığı sürece neredeyse hiç iyi birleşmiyorsa mantıklı olabilir . O zaman bile, JSON hatları oluşturmak ve jqçıktıyı görmek gibi bir şey kullanmak daha iyidir .
— Sim

11

Bu soru Ruby 1.8 içindir, ancak Google'da arama yaparken yine de zirveye çıkar.

yakut> = 1.9'da kullanabilirsiniz

File.write("public/temp.json",tempHash.to_json)

Ruby 1.8'de diğer cevaplarda belirtilenlerin dışında, tek satırlık form da kullanabilirsiniz.

File.open("public/temp.json","w"){ |f| f.write tempHash.to_json }

3

Bunun Ubuntu Linux'ta çalışmasını sağlamak için:

  1. Ruby-json Ubuntu paketini kurdum:

    apt-get install ruby-json
  2. Senaryoyu içine yazdım ${HOME}/rubybin/jsonDEMO

  3. $HOME/.bashrc dahil:

    ${HOME}/rubybin:${PATH}

(Bu vesileyle yukarıdakini bash komut satırına da yazdım.)

Sonra komut satırına girdiğimde çalıştı:

jsonDemo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.