Ich habe eine Zeichenkette, die ich in Ruby parsen möchte:
string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
Gibt es eine einfache Möglichkeit, die Daten zu extrahieren?
Ich habe eine Zeichenkette, die ich in Ruby parsen möchte:
string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
Gibt es eine einfache Möglichkeit, die Daten zu extrahieren?
Dies sieht aus wie JavaScript-Objekt-Notation (JSON) . Sie können JSON parsen, das sich in einer Variablen befindet, z. B. json_string
, etwa so:
require 'json'
JSON.parse(json_string)
Wenn Sie ein älteres Ruby verwenden, müssen Sie möglicherweise das json gem .
Es gibt auch andere JSON-Implementierungen für Ruby, die für einige Anwendungsfälle besser geeignet sein könnten:
Nur um die Antworten ein wenig zu erweitern, was mit dem geparsten Objekt zu tun ist:
# 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
Ich sehe hier keine Antworten, die das Parsen direkt in ein anderes Objekt als einen Hash erwähnen, aber es ist möglich, mit der schlecht dokumentierten object_class Option (siehe https://ruby-doc.org/stdlib-2.7.1/libdoc/json/rdoc/JSON.html ):
JSON.parse('{"foo":{"bar": 2}}', object_class: OpenStruct).foo.bar
=> 2
Der bessere Weg, diese Option zu lesen, ist "Die Ruby-Klasse, in die ein json-Objekt umgewandelt wird", was erklärt, warum sie standardmäßig auf Hash eingestellt ist. Ebenso gibt es eine array_class-Option für json-Arrays.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.