কীভাবে JSON কে একটি রুবি হ্যাশে রূপান্তর করবেন


137

আমার কাছে একটি JSON অবজেক্ট রয়েছে যার নীচের মানটি রয়েছে:

@value = {"val":"test","val1":"test1","val2":"test2"}

আমি কী / মান জোড়া পেতে রুবিতে এটি লুপ করতে চাই। আমি যখন ব্যবহার করি তখন @eachএটি বস্তুর মাধ্যমে পুনরাবৃত্তি হয় না কারণ এটি রুবি হ্যাশ আকারে নেই:

@value = {"val"=>"test","val1"=>"test1","val2"=>"test2"}

আমি কীভাবে উপরের জেএসএন বস্তুকে একটি রুবি হ্যাশে রূপান্তর করতে পারি?

উত্তর:


250

নিম্নলিখিত স্নিপেট সম্পর্কে কি?

require 'json'
value = '{"val":"test","val1":"test1","val2":"test2"}'
puts JSON.parse(value) # => {"val"=>"test","val1"=>"test1","val2"=>"test2"}

7
value = '{"val":"test","val1":"test1","val2":"test2"}'আরও পাঠযোগ্য হতে পারে।
ভাগ্যক্রিরিশ

40

আপনি রেলগুলির with_indifferent_accessপদ্ধতিটিও ব্যবহার করতে পারেন যাতে আপনি চিহ্ন বা স্ট্রিং দিয়ে কোনও শরীরে প্রবেশ করতে পারেন।

value = '{"val":"test","val1":"test1","val2":"test2"}'
json = JSON.parse(value).with_indifferent_access

তারপর

json[:val] #=> "test"

json["val"] #=> "test"

এটি কি বৃহত্তর হ্যাশ অবজেক্টগুলির জন্য আরও উত্স-নিবিড় কিনা জানেন? আমি রুবি / রেইলে নতুন, কিন্তু এই সদৃশ কী-মান জোড়াকে ধরে নিচ্ছি?
জোনাথন

4

ধরে নিই যে আপনার কাছে কোনও জেএসওএন হ্যাশ রয়েছে কোথাও কোথাও ঝুলছে, এটিকে স্বয়ংক্রিয়ভাবে ওয়ারহগের সংস্করণে রূপান্তর করতে, আপনার জেএসওএন হ্যাশ সামগ্রীকে এতে মোড়ানো %q{hsh}

এটি ওয়ারহগের উত্তরের মতো সমস্ত প্রয়োজনীয় পালানো পাঠ্য স্বয়ংক্রিয়ভাবে যুক্ত করে বলে মনে হচ্ছে।


4

আপনি কি চেষ্টা করেছেন: http://flori.github.com/json/ ?

এটি ব্যর্থ হয়ে, আপনি কেবল এটি বিশ্লেষণ করতে পারলেন? এটি যদি আপনার আগ্রহী কেবল অ্যারে হয় তবে উপরের অংশটি বিভক্ত করার জন্য কিছু সহজ হবে।


1

আমি আশ্চর্য হয়েছি কেউ জেএসএনের []পদ্ধতিটি নির্দেশ করে নি , যা জেএসএন থেকে / জেএসএন ডিকোড করা এবং এনকোড করা খুব সহজ এবং স্বচ্ছ করে তোলে।

যদি অবজেক্ট স্ট্রিং-জাতীয় হয় তবে স্ট্রিংটিকে বিশ্লেষণ করুন এবং একটি রুবি ডেটা স্ট্রাকচার হিসাবে পার্সড ফলাফলটি ফিরিয়ে দিন। অন্যথায় রুবি ডেটা স্ট্রাকচার অবজেক্ট থেকে একটি জেএসএন পাঠ্য উত্পন্ন করুন এবং এটি ফিরিয়ে দিন।

এই বিবেচনা:

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এখন JSON এনকোডযুক্ত রয়েছে hash

এটি ব্যবহার করে এটি বিপরীত করা সহজ:

JSON[str] # => {"val"=>"test", "val1"=>"test1", "val2"=>"test2"}

কাস্টম অবজেক্টগুলির to_sশ্রেণীর জন্য সংজ্ঞায়িত করা দরকার এবং এর অভ্যন্তরে বস্তুটিকে হ্যাশ রূপান্তর করে তারপরে to_jsonএটি ব্যবহার করুন।


0

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