Создание вложенного HASH из API Call не работает должным образом - PullRequest
0 голосов
/ 27 июня 2018

Я новичок здесь, и я надеюсь, что я все делаю правильно. Я также искал на форуме и с Googel, но я не нашел ответа. (Или я не заметил, что решение лежит у меня на глазах. Тогда извините>. <.) </p>

У меня проблема, и я точно не знаю, что я делаю неправильно в данный момент. Я делаю запрос API и получаю большой JSON. Это выглядит как-то так:

"apps": [
        {
            "title": "XX",
             ... many more data
},
{
            "title": "XX",
            ... many more data
},
{
            "title": "XX",
            ... many more data
} 
    ... and so on
]

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

{
 "APP_0" => {"Title"=>"Name1", "ID"=>"1234", "OS"=>"os"}
 "APP_1" => {"Title"=>"Name2", "ID"=>"5678", "OS"=>"os"}
}

но значения в хэше, которые я создаю с помощью своего кода, выглядят так:

"APP_1", {"Title"=>"Name2", "ID"=>"5678", "OS"=>"os"}

нет, если это действительный хеш? И после этого я хочу перебрать хэш и просто вывести идентификатор. Но я получаю ошибку (TypeError). Что я делаю неправильно?

require 'json'
require 'net/http'
require 'uri'
require 'httparty'

response = HTTParty.get('https://xxx/api/2/app', {
  headers: {"X-Toke" => "xyz"},
})
all_apps_parse = JSON.parse(response.body)

all_apps = Hash.new
all_apps_parse["apps"].each_with_index do |app, i|
  all_apps["APP_#{i}"] = {'Title' => app["title"],
                         'ID' => app["id"],
                         'OS' => app["platform"]}
end

all_apps.each_with_index do |app, i|
  app_id = app["App_#{i}"]["id"]
  p app_id
end

Я надеюсь, что кто-то может понять проблему и помочь мне :-). Заранее спасибо.

1 Ответ

0 голосов
/ 27 июня 2018

Предполагая, что данные выглядят примерно так:

all_apps_parse = { "apps" => [
                   {
                     "title" => "Name1",
                     "id" => 1234,
                     "platform" => "os"
                   },
                   {
                     "title" => "Name2",
                     "id" => 5678,
                     "platform" => "os"
                   },
                   {
                     "title" => "Name3",
                     "id" => 1111,
                     "platform" => "windows"
                   }]
                 }

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

all_apps = Hash.new
all_apps_parse["apps"].each_with_index do |app, i|
  all_apps["APP_#{i}"] = { 'Title' => app["title"],
                           'ID' => app["id"],
                           'OS' => app["platform"] }
end

all_apps
 => {"APP_0"=>{"Title"=>"Name1", "ID"=>1234, "OS"=>"os"}, "APP_1"=>{"Title"=>"Name2", "ID"=>5678, "OS"=>"os"}, "APP_2"=>{"Title"=>"Name3", "ID"=>1111, "OS"=>"windows"}}

all_apps.each do |key, value|
  puts key              # => e.g. "APP_0"
  puts value['ID']      # => e.g. 1234
end

# Prints 
APP_0
1234
APP_1
5678
APP_2
1111
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...