web-dev-qa-db-fra.com

Analyse d'une chaîne JSON dans Ruby

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?

335
Rod

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:

516
Greg

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
198
nevan king

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.

37
dav_i

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)
14
keymone

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.

7
guy mograbi

Je suggère Oj car il est waaaaaay plus rapide que la bibliothèque JSON standard.

https://github.com/ohler55/oj

( voir comparaisons de performances ici )

4
damianmr

Ces données semblent être au format JSON.

Vous pouvez utiliser ceci implémentation JSON pour Ruby pour l'extraire.

4
Justin Ethier