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

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

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

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

7 ответов


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

require 'json'
JSON.parse(json_string)

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


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


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

# 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

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

require 'json'

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

посмотреть в формате JSON в Ruby-Doc.


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

JSON.parse(string)

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

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

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 install.

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

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


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

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


Я предлагаю Oj, поскольку это waaaaaay быстрее, чем стандартная библиотека JSON.

https://github.com/ohler55/oj

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