Разбор строки JSON в Ruby - PullRequest
       2

Разбор строки JSON в Ruby

331 голосов
/ 23 марта 2011

У меня есть строка, которую я хочу проанализировать в Ruby:

string = '{"desc":{"someKey":"someValue","anotherKey":"value"},"main_item":{"stats":{"a":8,"b":12,"c":10}}}'

Есть ли простой способ извлечь данные?

Ответы [ 7 ]

507 голосов
/ 23 марта 2011

Это выглядит как JavaScript Object Notation (JSON) .Вы можете проанализировать JSON, который находится в некоторой переменной, например json_string, например:

require 'json'
JSON.parse(json_string)

Если вы используете более старый Ruby, вам может потребоваться установить json gem .


Существуют также другие реализации JSON для Ruby, которые могут лучше соответствовать некоторым сценариям использования:

196 голосов
/ 29 ноября 2012

Просто для того, чтобы немного расширить ответы, что делать с проанализированным объектом:

# 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
37 голосов
/ 15 декабря 2015

Начиная с Ruby v1.9.3, вам не нужно устанавливать какие-либо Gems для анализа JSON, просто используйте require 'json':

require 'json'

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

См. JSON в Ruby-Doc.

14 голосов
/ 23 марта 2011

Это похоже на строку JSON.Вы можете использовать одну из многих библиотек JSON, и это так же просто, как сделать:

JSON.parse(string)
7 голосов
/ 21 октября 2014

Это немного поздно, но я столкнулся с чем-то интересным, что, кажется, важно внести свой вклад.

Я случайно написал этот код, и похоже, что он работает:

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, поэтому установка gem отсутствует.

Я использую версии 1.8.x и 1.9.x - поэтому библиотека json не встроена, а в версии 2.x.

Так что технически - это самый простой способ извлечь данные в версии ниже 2.0.

4 голосов
/ 15 сентября 2014

Я предлагаю Oj, так как он работает намного быстрее стандартной библиотеки JSON.

https://github.com/ohler55/oj

( см. Сравнение производительности здесь )

4 голосов
/ 23 марта 2011

Эти данные выглядят как в формате JSON.

Вы можете использовать эту реализацию JSON для Ruby , чтобы извлечь ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...