Проблемы с парсингом файла Json в Ruby

Я довольно новичок в программировании ruby ​​и использовании пакетов json, я думаю, что сталкиваюсь с типичной ошибкой noob, но я просто не могу найти свою ошибку в течение двух дней... Я начал так:

require 'discogs-wrapper'
require 'json'

aw = Discogs::Wrapper.new("my_application", user_token: "my_user_token")
inv = aw.get_user_inventory('my_user_name', :per_page => 1, :page => 1)
p=JSON.parse(inv)

Что я получаю, это:

C:/Ruby24-x64/lib/ruby/2.4.0/json/common.rb:156:in `initialize': no implicit conversion of Hashie::Mash into String (TypeError)
from C:/Ruby24-x64/lib/ruby/2.4.0/json/common.rb:156:in `new'
from C:/Ruby24-x64/lib/ruby/2.4.0/json/common.rb:156:in `parse'
from C:/Users/rtuz2th/.RubyMine2017.3/config/scratches/scratch.rb:6:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'

Я уже искал ваш форум и узнал, что эта ошибка, вероятно, означает, что у меня нет правильного JSON-файла (хотя он идет прямо из discogs-api, я в основном думал, что эти парни знают, что они делают). Итак, что я попробовал дальше было

require 'discogs-wrapper'
require 'json'

aw = Discogs::Wrapper.new("my_application", user_token: "my_user_token")
inv = aw.get_user_inventory('my_user_name', :per_page => 1, :page => 1)
inv = inv.to_json    
p=JSON.parse(inv)

По крайней мере, теперь мой код работает без ошибок. Но когда я пытаюсь ссылаться на любую информацию в inv, я просто получаю пустые ответы. inv (без.to_json выглядит так:

  {"pagination"=>
  {"per_page"=>1,
   "items"=>13692,
   "page"=>1,
   "urls"=>
    {"last"=>
      "URL containing tokens",
     "next"=>
      "URL containing tokens"},
   "pages"=>13692},
 "listings"=>
  [{"status"=>"Draft",
    "original_price"=>
     {"curr_abbr"=>"EUR",
      "formatted"=>"\u20AC10.46",
      "value"=>10.46,
      "curr_id"=>3},
    "weight"=>230.0,
    "original_shipping_price"=>
     {"curr_abbr"=>"EUR",
      "formatted"=>"\u20AC5.90",
      "value"=>5.9,
      "curr_id"=>3},
    "price"=>{"currency"=>"EUR", "value"=>10.46},
    "allow_offers"=>true,
    "uri"=>"https://www.discogs.com/sell/item/437965910",
    "sleeve_condition"=>"Very Good Plus (VG+)",
    "format_quantity"=>1,
    "id"=>437965910,
    "shipping_price"=>{"currency"=>"EUR", "value"=>5.9},
    "posted"=>"2017-02-07T23:43:01-08:00",
    "ships_from"=>"Germany",
    "in_cart"=>false,
    "comments"=>"",
    "seller"=>
     {"username"=>"zweischeiben.de",
      "stats"=>{"rating"=>"100.0", "total"=>143, "stars"=>5.0},
      "uid"=>3359767,
      "url"=>"https://api.discogs.com/users/zweischeiben.de",
      "html_url"=>"https://www.discogs.com/user/zweischeiben.de",
      "shipping"=>
       "(Lots of information about shipping, cut just cut it out)"
      "payment"=>"Bank Transfer, PayPal",
      "avatar_url"=>
       "(cut out url)",
      "resource_url"=>"https://api.discogs.com/users/zweischeiben.de",
      "id"=>3359767},
    "condition"=>"Near Mint (NM or M-)",
    "release"=>
     {"thumbnail"=>
       "(cut out url)",
      "description"=>"Steamhammer - Mountains (LP, Album, RE)",
      "artist"=>"Steamhammer",
      "format"=>"LP, Album, RE",
      "resource_url"=>"https://api.discogs.com/releases/7303333",
      "title"=>"Mountains",
      "year"=>0,
      "id"=>7303333,
      "catalog_number"=>"201.006, 0201.006"},
                        "resource_url"=>"https://api.discogs.com/marketplace/listings/437965910",
"audio"=>false,
"external_id"=>"3, 16",
"location"=>"T52574"}]}

Но если я сейчас попытаюсь сослаться, например, на местоположение:

require 'discogs-wrapper'
require 'json'

aw = Discogs::Wrapper.new("my_application", user_token: "my_token")
inv=aw.get_user_inventory('my_username', :per_page => 1, :page => 1)
inv=inv.to_json
p=JSON.parse(inv)
puts p[location]

Я просто получаю такую ​​ошибку

C:\Ruby24-x64\bin\ruby.exe -e     $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)             C:/Users/rtuz2th/.RubyMine2017.3/config/scratches/scratch.rb
C:/Users/rtuz2th/.RubyMine2017.3/config/scratches/scratch.rb:9:in `<top (required)>': undefined local variable or method `location' for main:Object (NameError)
from -e:1:in `load'
from -e:1:in `<main>'

Process finished with exit code 1

или пустой ответ. Я пытаюсь решить эту проблему уже два дня, но у меня совершенно нет идей. Заранее спасибо за помощь!

1 ответ

inv = inv.to_json
p = JSON.parse(inv)

Вышесказанное - это просто использование inv как это уже хеш


puts p[location]

Вы не можете просто найти любой ключ, расположенный глубоко в иерархии дерева, или ваш хеш. У вас в хеше есть ключи в качестве ключей, у него есть два элемента верхнего уровня, 'pagination' а также 'listings'последний является массивом, и каждый элемент этого массива является хешем location ключ.


Пока вы вырезали длинное значение, вы убрали запятую, и я не смог скопировать и вставить ввод и дать точный ответ.

Другие вопросы по тегам