কীভাবে সঠিক ফর্ম্যাটে কোনও 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 ফর্ম্যাটে ফাইলটিতে এটি লিখতে পারি?


এই এসও উত্তরটি একবার দেখুন: স্ট্যাকওভারফ্লো.com
চার্লি মার্টিন

আপনি যা করছেন তা আসলে আমি ব্যবহার করি এমন 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

আপনার টেম্প.জেসন ফাইলটি এখন এমন দেখাচ্ছে:

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

3
গৌণ উন্নতি: আমি ব্লক ফর্মটি সুপারিশ করছি:File.open(...){ |f| f << h.to_json }
ফ্রোগজ


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
@ বোল্ডার_রবি সংযুক্তি কেবল তখনই অর্থবোধ করতে পারে যদি ফাইল ফর্ম্যাটটি JSONlines (প্রতি লাইনে একটি জেএসওএন অবজেক্ট) থাকে এবং এটি খুব কমই খুব ভালভাবে মিলিত হয় pretty_generate, যদি না আউটপুটটির ভোক্তা মানুষ হয়। তারপরেও, JSONlines জেনারেট করা এবং jqআউটপুট দেখার মতো কিছু ব্যবহার করা ভাল ।
সিম

11

এই প্রশ্নটি রুবি ১.৮ এর জন্য তবে গুগল করার সময় এটি শীর্ষে আসে।

রুবিতে> = 1.9 আপনি ব্যবহার করতে পারেন

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

অন্যান্য উত্তরে যা উল্লেখ করা হয়েছে তা বাদে, রুবি ১.৮ এ আপনি একটি লাইনার ফর্মও ব্যবহার করতে পারেন

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.