রুবিতে একটি JSON স্ট্রিং পার্স করা হচ্ছে


359

আমার একটি স্ট্রিং রয়েছে যা আমি রুবিতে পার্স করতে চাই:

string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'

ডেটা আহরণের কোনও সহজ উপায় আছে?


22
জেএসওন সরাসরি রুবিতে সমর্থিত এবং এটি কমপক্ষে রুবি ভি 1.9.3 থেকে কার্যকর, সুতরাং আপনি আরও কিছু পুরানো ব্যবহার না করে রত্ন ইনস্টল করার দরকার নেই। কেবল require 'json'আপনার কোড ব্যবহার করুন।
টিন ম্যান

উত্তর:


559

এটি জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (জেএসএন) এর মতো দেখাচ্ছে । আপনি JSON কে পার্স করতে পারেন যা কিছু ভেরিয়েবলের মধ্যে থাকে, যেমন json_string:

require 'json'
JSON.parse(json_string)

আপনি যদি কোনও বয়স্ক রুবি ব্যবহার করেন তবে আপনাকে জসন মণি ইনস্টল করতে হবে ।


রুবির জন্য জেএসওনের অন্যান্য বাস্তবায়নও রয়েছে যা কিছু ব্যবহারের ক্ষেত্রে আরও ভাল ফিট করতে পারে:


32
প্রতীক হিসাবে কীগুলি পেতে, আপনি বিকল্পটি প্রতীকীকরণের নামগুলি সত্যতে সেট করতে পারেন। উদাহরণ:JSON.parse(string, symbolize_names: true) #=> {key: :value}
নন্দো

31
জেএসওন সরাসরি রুবিতে সমর্থিত এবং এটি কমপক্ষে রুবি ভি ১.৯.৩ থেকে শুরু হয়েছে, সুতরাং আপনি আরও কিছু পুরানো ব্যবহার না করে রত্ন ইনস্টল করার দরকার নেই। কেবল require 'json'আপনার কোড ব্যবহার করুন।
টিন ম্যান

212

পার্সড বস্তুটি দিয়ে কী করবেন তা দিয়ে উত্তরগুলিকে কিছুটা প্রসারিত করতে:

# JSON Parsing example
require "rubygems" # don't need this if you're Ruby v1.9.3 or higher
require "json"

string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
parsed = JSON.parse(string) # returns a hash

p parsed["desc"]["someKey"]
p parsed["main_item"]["stats"]["a"]

# Read JSON from a file, iterate over objects
file = open("shops.json")
json = file.read

parsed = JSON.parse(json)

parsed["shop"].each do |shop|
  p shop["id"]
end

খুব সুন্দরভাবে ব্যাখ্যা করা।
berto77

7
গুরুত্বপূর্ণ নোট: '{ "a": "bob" }'বৈধ। "{ 'a': 'bob' }"এটি না.
জিগি

7
@ লিনুসএন কারণ জেএসএনের স্ট্রিংগুলির চারপাশে ডাবল উদ্ধৃতি প্রয়োজন। JSON সংজ্ঞা ( json.org ) তে স্ট্রিং দেখুন : "একটি স্ট্রিং শূন্য বা তার বেশি ইউনিকোড অক্ষরের একটি অনুক্রম, ব্যাকস্ল্যাশ পলায়ন ব্যবহার করে ডাবল উদ্ধৃতিতে আবৃত।"
এন্ডোরামা

1
অনেক ক্ষেত্রে আপনি JSON.parseএকটি রেসকিউ ব্লকের মধ্যে মোড়ানো করতে চান JSON::ParserError
জনমল

JSON.parse("[#{value}]")[0]ত্রুটি এড়াতেA JSON text must at least contain two octets!
রিভনফল

39

রুবি ভি ১.৯.৩ অনুসারে জেএসএন পার্স করার জন্য আপনাকে কোনও রত্ন ইনস্টল করতে হবে না, কেবল ব্যবহার করুন require 'json':

require 'json'

json = JSON.parse '{"foo":"bar", "ping":"pong"}'
puts json['foo'] # prints "bar"

দেখুন তাদেরকে JSON রুবি-ডক এ।


15

এটি দেখতে JSON স্ট্রিংয়ের মতো দেখাচ্ছে। আপনি অনেকগুলি জেএসএন লাইব্রেরি ব্যবহার করতে পারেন এবং এটি করা যেমন সহজ:

JSON.parse(string)

7

এটি কিছুটা দেরি হয়ে গেছে তবে আমি এমন আকর্ষণীয় কিছুতে দৌড়েছি যা অবদানের পক্ষে গুরুত্বপূর্ণ।

আমি দুর্ঘটনাক্রমে এই কোডটি লিখেছি এবং এটি কাজ করে বলে মনে হচ্ছে:

require 'yaml'
CONFIG_FILE = ENV['CONFIG_FILE'] # path to a JSON config file 
configs = YAML.load_file("#{CONFIG_FILE}")
puts configs['desc']['someKey']

আমি ওয়াইএএমএল লাইব্রেরিটি ব্যবহার করার পরে এটি কাজ করে দেখে অবাক হয়েছি, তবে এটি কার্যকর হয়।

এটি গুরুত্বপূর্ণ হওয়ার কারণটি এটি yaml রুবির সাথে অন্তর্নির্মিত আসে তাই কোনও রত্ন ইনস্টল নেই।

আমি সংস্করণ 1.8.x এবং 1.9.x ব্যবহার করছি - তাই json গ্রন্থাগারটি অন্তর্নির্মিত নয়, তবে এটি সংস্করণ 2.x এ রয়েছে

প্রযুক্তিগতভাবে - 2.0 এর চেয়ে কম সংস্করণে ডেটা উত্তোলনের এটি সহজতম উপায়।


হ্যাঁ, জেএসএন আসলে সাইক কোড দ্বারা পার্স করা হয়েছে, যা রুবিতে ওয়াইএএমএলকেও পার্স করে। এবং জবিএসএন পার্সিং রুবি v1.9.3 এ চালু হয়েছিল ।
টিন ম্যান

1
এই কাজটি করার কারণটি হ'ল শব্দার্থগতভাবে (সর্বাধিক) JSON বৈধ YAML (বিশেষত YAML 1.2)
জাস্টিন ওহমস


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