J'ai une chaîne que je veux analyser en Ruby:
string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'
Existe-t-il un moyen facile d'extraire les données?
Cela ressemble à Notation d'objet JavaScript (JSON) . Vous pouvez analyser le code JSON qui réside dans une variable, par exemple. json_string
, comme ceci:
require 'json'
JSON.parse(json_string)
Si vous utilisez un Ruby plus ancien, vous devrez peut-être installer le json gem .
Il existe également d'autres implémentations de JSON pour Ruby qui pourraient mieux convenir à certains cas d'utilisation:
Juste pour étendre un peu les réponses avec ce qu’il faut faire avec l’objet analysé:
# JSON Parsing example
require "rubygems"
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 partir de Ruby v1.9.3, vous n'avez pas besoin d'installer Gems pour analyser JSON, utilisez simplement require 'json'
:
require 'json'
json = JSON.parse '{"foo":"bar", "ping":"pong"}'
puts json['foo'] # prints "bar"
Voir JSON à Ruby-Doc.
Cela ressemble à une chaîne JSON. Vous pouvez utiliser l'une des nombreuses bibliothèques JSON. C'est aussi simple que faire:
JSON.parse(string)
C'est un peu tard mais j'ai rencontré quelque chose d'intéressant qui semble important de contribuer.
J'ai accidentellement écrit ce code et il semble fonctionner:
require 'yaml'
CONFIG_FILE = ENV['CONFIG_FILE'] # path to a JSON config file
configs = YAML.load_file("#{CONFIG_FILE}")
puts configs['desc']['someKey']
J'ai été surpris de voir que cela fonctionne depuis que j'utilise la bibliothèque YAML, mais cela fonctionne.
La raison pour laquelle il est important est que yaml
est intégré à Ruby, de sorte qu'il n'y a aucune installation de gem.
J'utilise les versions 1.8.x et 1.9.x. La bibliothèque json
n'est donc pas intégrée, mais elle existe dans la version 2.x.
Donc, techniquement, c’est le moyen le plus simple d’extraire les données dans une version inférieure à 2.0.
Je suggère Oj car il est waaaaaay plus rapide que la bibliothèque JSON standard.
Ces données semblent être au format JSON.
Vous pouvez utiliser ceci implémentation JSON pour Ruby pour l'extraire.