ฉันมีสตริงที่ฉันต้องการแยกในทับทิม:
string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
มีวิธีที่ง่ายในการดึงข้อมูลหรือไม่
ฉันมีสตริงที่ฉันต้องการแยกในทับทิม:
string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
มีวิธีที่ง่ายในการดึงข้อมูลหรือไม่
คำตอบ:
ลักษณะเช่นนี้Object สัญลักษณ์ JavaScript (JSON) คุณสามารถวิเคราะห์ JSON ที่อยู่ในตัวแปรเช่นjson_string
เช่น:
require 'json'
JSON.parse(json_string)
หากคุณกำลังใช้เก่าทับทิมคุณอาจต้องติดตั้งอัญมณี JSON
นอกจากนี้ยังมีการใช้งานอื่น ๆ ของ JSON สำหรับ Ruby ที่อาจเหมาะสมกับบางกรณีการใช้งานที่ดีกว่า:
JSON.parse(string, symbolize_names: true) #=> {key: :value}
require 'json'
ในรหัสของคุณ
เพียงเพื่อขยายคำตอบเล็กน้อยเกี่ยวกับสิ่งที่แยกวิเคราะห์:
# 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
'{ "a": "bob" }'
ถูกต้อง "{ 'a': 'bob' }"
ไม่ใช่.
JSON.parse
JSON::ParserError
JSON.parse("[#{value}]")[0]
เพื่อหลีกเลี่ยงข้อผิดพลาดA JSON text must at least contain two octets!
ในฐานะของ Ruby v1.9.3 คุณไม่จำเป็นต้องติดตั้งอัญมณีใด ๆ เพื่อแยก JSON ให้ใช้require 'json'
:
require 'json'
json = JSON.parse '{"foo":"bar", "ping":"pong"}'
puts json['foo'] # prints "bar"
ดูJSONที่ Ruby-Doc
ดูเหมือนว่าเป็นสตริง JSON คุณสามารถใช้หนึ่งในหลาย ๆ JSON ไลบรารีและมันง่ายเหมือนการทำ:
JSON.parse(string)
มันช้าไปหน่อย แต่ฉันวิ่งเข้าไปในสิ่งที่น่าสนใจซึ่งดูเหมือนจะสำคัญสำหรับการมีส่วนร่วม
ฉันบังเอิญเขียนรหัสนี้และดูเหมือนว่าจะทำงาน:
require 'yaml'
CONFIG_FILE = ENV['CONFIG_FILE'] # path to a JSON config file
configs = YAML.load_file("#{CONFIG_FILE}")
puts configs['desc']['someKey']
ฉันแปลกใจที่เห็นว่ามันใช้งานได้ตั้งแต่ฉันใช้ห้องสมุด YAML แต่มันใช้งานได้
เหตุผลที่สำคัญคือyaml
มาพร้อมกับ Ruby ในตัวจึงไม่มีการติดตั้งอัญมณี
ฉันใช้รุ่น 1.8.x และ 1.9.x - ดังนั้นjson
ไลบรารีไม่ได้ถูกสร้างขึ้น แต่เป็นรุ่น 2.x
ดังนั้นทางเทคนิค - นี่เป็นวิธีที่ง่ายที่สุดในการดึงข้อมูลในรุ่นที่ต่ำกว่า 2.0
ข้อมูลนั้นดูเหมือนว่าอยู่ในรูปแบบ JSON
คุณสามารถใช้การนำ JSONนี้ไปใช้สำหรับ Rubyเพื่อแยกออก
ฉันแนะนำ Oj เนื่องจาก waaaaaay เร็วกว่าไลบรารี JSON มาตรฐาน
require 'json'
ในรหัสของคุณ