Analysieren einer JSON-Zeichenfolge in Ruby


359

Ich habe eine Zeichenfolge, die ich in Ruby analysieren 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?


22
JSON wird in Ruby direkt unterstützt und ist seit mindestens Ruby v1.9.3 verfügbar. Daher muss kein Gem installiert werden, es sei denn, Sie verwenden etwas Älteres. Verwenden require 'json'Sie einfach in Ihrem Code.
der Blechmann

Antworten:


559

Dies sieht aus wie JavaScript Object Notation (JSON) . Sie können JSON analysieren, das sich in einer Variablen befindet, z. B json_string.:

require 'json'
JSON.parse(json_string)

Wenn Sie einen älteren Ruby verwenden, müssen Sie möglicherweise den json gem installieren .


Es gibt auch andere Implementierungen von JSON für Ruby, die möglicherweise besser zu einigen Anwendungsfällen passen:


32
Sie können auch die Option symbolize_names auf true setzen, um Schlüssel als Symbole abzurufen. Beispiel:JSON.parse(string, symbolize_names: true) #=> {key: :value}
Nando Sousa

31
JSON wird direkt in Ruby unterstützt und ist seit mindestens Ruby v1.9.3 verfügbar. Daher muss kein Gem installiert werden, es sei denn, Sie verwenden etwas Älteres. Verwenden require 'json'Sie einfach in Ihrem Code.
der Blechmann

212

Nur um die Antworten ein wenig zu erweitern, was mit dem analysierten 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

sehr schön erklärt.
Berto77

7
Wichtiger Hinweis: '{ "a": "bob" }'ist gültig. "{ 'a': 'bob' }"ist nicht.
Ziggy

7
@LinusAn, da JSON doppelte Anführungszeichen um Zeichenfolgen erfordert. Siehe Zeichenfolge in der JSON-Definition ( json.org ): "Eine Zeichenfolge ist eine Folge von null oder mehr Unicode-Zeichen, die in doppelte Anführungszeichen gesetzt werden und Backslash-Escapezeichen verwenden."
Endorama

1
In vielen Fällen möchten Sie JSON.parsein einen Rettungsblock für einwickeln JSON::ParserError.
Johnml

JSON.parse("[#{value}]")[0]um den Fehler zu vermeidenA JSON text must at least contain two octets!
Rivenfall

39

Ab Ruby v1.9.3 müssen Sie keine Gems installieren, um JSON zu analysieren. Verwenden Sie einfach require 'json':

require 'json'

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

Siehe JSON bei Ruby-Doc.


15

Es sieht aus wie eine JSON-Zeichenfolge. Sie können eine von vielen JSON-Bibliotheken verwenden und es ist so einfach wie:

JSON.parse(string)

7

Das ist etwas spät, aber ich bin auf etwas Interessantes gestoßen, das wichtig zu sein scheint.

Ich habe diesen Code versehentlich geschrieben und er scheint zu funktionieren:

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

Ich war überrascht zu sehen, dass es funktioniert, da ich die YAML-Bibliothek verwende, aber es funktioniert.

Der Grund, warum es wichtig ist, ist, dass yamlRuby integriert ist, sodass es keine Edelsteininstallation gibt.

Ich verwende die Versionen 1.8.x und 1.9.x - die jsonBibliothek ist also nicht integriert, aber in Version 2.x.

Technisch gesehen ist dies der einfachste Weg, um die Daten in einer Version unter 2.0 zu extrahieren.


Ja, JSON wird tatsächlich vom Psych-Code analysiert, der auch YAML in Ruby analysiert. Und JSON-Parsing wurde in Ruby v1.9.3 eingeführt .
der Blechmann

1
Der Grund, warum dies funktioniert, ist, dass semantisch (die meisten) JSON gültig ist YAML (insbesondere YAML 1.2)
Justin Ohms


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.