2014-01-10 3 views
2

Я подумываю написать веб-приложение, которое сканирует API и возвращает эту информацию в форме JSON.Извлечь определенное поле из вложенных хешей JSON

Однако, я только после одного номера, затем текущей цены (в этом примере, «227»). Как я могу получить доступ к этому в Ruby? Я не знаю, с чего начать. Я никогда не рассматривал такой текст.

Ради ОБСУЖДЕНИЯ в, предположу, что я сохранить этот вывод в переменный экземпляр @information

{ 
    "item": { 
     "icon": "http://services.runescape.com/m=itemdb_rs/4332_obj_sprite.gif?id=4798", 
     "icon_large": "http://services.runescape.com/m=itemdb_rs/4332_obj_big.gif?id=4798", 
     "id": 4798, 
     "type": "Ammo", 
     "typeIcon": "http://www.runescape.com/img/categories/Ammo", 
     "name": "Adamant brutal", 
     "description": "Blunt adamantite arrow...ouch", 
     "current": { 
      "trend": "neutral", 
      "price": 227 
     }, 
     "today": { 
      "trend": "neutral", 
      "price": 0 
     }, 
     "day30": { 
      "trend": "positive", 
      "change": "+1.0%" 
     }, 
     "day90": { 
      "trend": "positive", 
      "change": "+1.0%" 
     }, 
     "day180": { 
      "trend": "positive", 
      "change": "+2.0%" 
     }, 
     "members": "true" 
    } 
} 
+0

Вы только хотите найти, где появляется "227"? Или вы хотите найти все «ценовые» вхождения? Или вы хотите получить доступ к «текущей цене»? –

+0

Текущая цена. Уандл решил это. –

ответ

2

Первых следовать этому посту, чтобы разобрать этот JSON, чтобы Hash Parsing a JSON string in Ruby

говорит разобранное имя хэша это my_hash, тогда следующее должно дать вам цену

my_hash['item']['current']['price'] 

Edit:

Как вы сказали, что вы хотите сохранить его в @information

@information = my_hash['item']['current']['price'] 
0

Даже вы можете использовать hashie это дает вашему JSON в читаемый структурного кода

Установите Hashie

gem install hashie

то в вашем коде все, что JSON взять в переменной my_json

myhash = Hashie::Mash.new(my_json)

@information = my_hash.item.current.price

Советы: - если ваш JSON является динамичным, и он может ответить какой-то другой структурный элемент, так что вы можете поддерживать исключительное код

@information = my_hash.item.try(:current).try(:price)

Смежные вопросы