JSON फाइल को सही फॉर्मेट में कैसे लिखें


111

मैं रूबी में एक हैश बना रहा हूं और इसे JSON फ़ाइल में लिखना चाहता हूं, सही प्रारूप में।

यहाँ मेरा कोड है:

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

और यहाँ परिणामी फ़ाइल की सामग्री है:

key_aval_akey_bval_b

मैं सिनात्रा (न जाने क्या संस्करण) और रूबी वी 1.8.7 का उपयोग कर रहा हूं।

मैं इसे सही JSON प्रारूप में फ़ाइल में कैसे लिख सकता हूं?


इस SO उत्तर पर एक नज़र डालें: stackoverflow.com/questions/1684588/…
चार्ली मार्टिन

आप जो कर रहे हैं वह वास्तव में कुछ है जो मैं JSON और YAML संरचनाओं का उपयोग करने के लिए उपयोग करता हूं। मैं एक फ़ाइल के लिए YAML / JSON को बचाने के लिए कोड का एक छोटा सा टुकड़ा लिखूंगा, फिर उसी संरचनाओं का निर्माण करूँगा जो दिखा रहा है कि डेटा को डंपिंग और पुनः लोड करने से पहले और / या बाद में कैसा दिखना चाहिए। इसलिए, हालांकि आपका कोड काफी सही काम नहीं कर रहा है, इस प्रक्रिया के साथ रहें क्योंकि यह लंबे समय में जीवन को आसान बनाता है।
टिन मैन

जवाबों:


177

JSON लाइब्रेरी की आवश्यकता है , और उपयोग करें 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 फाइल अब ऐसी दिखती है:

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

3
मामूली सुधार: मैं ब्लॉक फॉर्म का सुझाव देता हूं:File.open(...){ |f| f << h.to_json }
फ्रॉग्ज

18
JSON.pretty_generate(tempHash)यह भी rad ruby-doc.org/stdlib-1.9.3/libdoc/json/rdoc/… है
कॉनर लीच

94

स्वरूपण के साथ

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

उत्पादन

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

1
मुझे "a +" विकल्प पसंद है। मौजूदा डेटा को क्लोब नहीं करता है।
बोल्डर_रूबी

2
@boulder_ruby को जोड़ने का केवल तभी अर्थ हो सकता है जब फ़ाइल प्रारूप JSONlines (प्रति पंक्ति एक JSON ऑब्जेक्ट) हो और pretty_generateजब तक कि आउटपुट का उपभोक्ता मानव न हो, तब तक शायद ही कभी इसके साथ अच्छी तरह से मेल खाता हो । फिर भी, JSONlines उत्पन्न करना और jqआउटपुट देखने के लिए कुछ का उपयोग करना बेहतर है ।
सिम

11

यह सवाल रूबी 1.8 के लिए है लेकिन यह अभी भी शीर्ष पर आता है जब गुग्लिंग।

रूबी में = = 1.9 आप उपयोग कर सकते हैं

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

अन्य उत्तर में उल्लिखित के अलावा, रूबी 1.8 में आप एक लाइनर फॉर्म का भी उपयोग कर सकते हैं

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

3

उबंटू लिनक्स पर यह काम करने के लिए:

  1. मैंने उबंटू पैकेज माणिक-जसन स्थापित किया:

    apt-get install ruby-json
  2. में स्क्रिप्ट लिखी ${HOME}/rubybin/jsonDEMO

  3. $HOME/.bashrc शामिल हैं:

    ${HOME}/rubybin:${PATH}

(इस अवसर पर मैंने बैश कमांड लाइन पर भी टाइप किया है।)

जब मैंने कमांड लाइन पर प्रवेश किया तो यह काम किया:

jsonDemo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.