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


340

রুবি হ্যাশ অবজেক্টটিকে কীভাবে JSON এ রূপান্তর করবেন? সুতরাং আমি নীচে এই উদাহরণটি চেষ্টা করছি এবং এটি কাজ করে না?

আমি রুবিডকটির দিকে চেয়ে ছিলাম এবং স্পষ্টতই Hashবস্তুর কোনও to_jsonপদ্ধতি নেই। তবে আমি ব্লগগুলিতে পড়ছি যা রেইল সমর্থন করে active_record.to_jsonএবং সমর্থন করে hash#to_json। আমি বুঝতে পারি ActiveRecordএকটি রেলস বস্তু, তবে Hashএটি রেলের স্থানীয় নয়, এটি খাঁটি রুবি অবজেক্ট। সুতরাং কারাগারে আপনি একটি করতে পারেন hash.to_json, তবে খাঁটি রুবিতে নয় ??

car = {:make => "bmw", :year => "2003"}
car.to_json

উত্তর:


563

রুবির অসংখ্য চমকপ্রদতাগুলির মধ্যে একটি হ'ল আপনার নিজস্ব পদ্ধতি দ্বারা বিদ্যমান ক্লাসগুলি প্রসারিত করার সম্ভাবনা। এটিকে বলা হয় "ক্লাস রিওপেনিং" বা বানর-প্যাচিং ( যদিও পরবর্তীকালের অর্থ পরিবর্তিত হতে পারে )।

সুতরাং, এখানে একবার দেখুন:

car = {:make => "bmw", :year => "2003"}
# => {:make=>"bmw", :year=>"2003"}
car.to_json
# NoMethodError: undefined method `to_json' for {:make=>"bmw", :year=>"2003"}:Hash
#   from (irb):11
#   from /usr/bin/irb:12:in `<main>'
require 'json'
# => true
car.to_json
# => "{"make":"bmw","year":"2003"}"

যেহেতু আপনি দেখতে পারেন, প্রয়োজন jsonজাদুর পদ্ধতি আনা হয়েছে to_jsonআমাদের কাছে Hash


2
আমি শুধু বলতে পারি বাহ :) অনেক ধন্যবাদ !! সুতরাং মূলত আমি জেসন ক্লাসকে গতিশীলভাবে প্রসারিত করতে পেরেছিলাম ??
কাপসো

1
আমি রুবি অবজেক্টের সাথে একই জিনিস চেষ্টা করেছিলাম এবং এটি কার্যকর হয় না ?? >> 'জেসন' => সত্য >> শ্রেণীর ব্যক্তি প্রয়োজন >> অ্যাট্রি_অ্যাক্সেসর: নাম, নাম: শেষ নাম => নীল >> পি = পার্সোন.নিউ => # <ব্যক্তি: 0x101155f70> >> p.fname = "বিল "=>" বিল ">> পি.লাইনাম =" শাইন "=>" শাইন ">> পি টো_জসন =>" \ "# <ব্যক্তি: 0x101155f70> \" "
কাপসো

10
না, না, কাউকে কোড দিতে হবে কীভাবে একটি স্বেচ্ছাসেবীর শ্রেণীর অবজেক্টটি জেএসএনে সিরিয়াল করা উচিত। তারা এটি করেছে Hashএবং মণির Arrayক্লাস করেছে json, তবে আপনার শ্রেণিটি Personকেবল একটি সমতল Object। তবে আপনি এর Hashপরিবর্তে উত্তরাধিকারী হতে পারেন । আপনি পরিচালনা না করলে আপনি একটি নতুন প্রশ্ন খুলতে পারেন।
ম্লাদেন জাব্লানোভিć

ধন্যবাদ। এখানে নতুন প্রশ্ন, কোনও সহায়তা প্রশংসা করা হবে। ধন্যবাদ। stackoverflow.com/questions/3226054/...
kapso

আইআরবি টাইপ আউটপুট বলে মনে হচ্ছে আপনি তা প্রদর্শন করছেন। আমি ডেটটাইম অবজেক্টটির জন্য # টো_জসন হ্যাশ পাওয়ার চেষ্টা করছিলাম। এই পোস্টে ধন্যবাদ আমি এটি পেয়েছি। তবে আমি পি ডেট_জসনের সাথে পরিদর্শন করেছি এটিই সত্যিকারের স্ট্রিং "{\" বছর \ ": 2013, \" সোম \ ": 7, m" মাই \ ": 16, hour" ঘন্টা \ ": 13, min "মিনিট \": 54, \ "সেকেন্ড \": 32, zone "জোন \": \ "- 05:00 \", off "অফসেট \": - 18000} "সুতরাং আপনি দেখতে পাচ্ছেন যে এটি তৈরি করছে স্ট্রিং হিসাবে মূল চিহ্ন এবং অবশ্যই যে ডেটা অপরিবর্তিত। আবার ধন্যবাদ. দুঃখিত আমি যদিও এত দেরী।
ডগলাস জি। অ্যালেন

19
require 'json/ext' # to use the C based extension instead of json/pure

puts {hash: 123}.to_json

6

আপনি এটি ব্যবহার করতে পারেন JSON.generate:

require 'json'

JSON.generate({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

বা এর উপনাম JSON.unparse,:

require 'json'

JSON.unparse({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

3

আপনার ফাইলের শীর্ষে নিম্নলিখিত লাইনটি যুক্ত করুন

require 'json'

তারপরে আপনি ব্যবহার করতে পারেন:

car = {:make => "bmw", :year => "2003"}
car.to_json

বিকল্পভাবে, আপনি ব্যবহার করতে পারেন:

JSON.generate({:make => "bmw", :year => "2003"})

-1

আপনি jsonআপনার ফাইল অন্তর্ভুক্ত করা উচিত

উদাহরণ স্বরূপ,

require 'json'

your_hash = {one: "1", two: "2"}
your_hash.to_json

jsonআপনার সম্পর্কে আরও জ্ঞানের জন্য নীচের লিঙ্কটি দেখতে পারেন। জসন লার্নিং

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