Як відокремити ключі і значення в результатах JSON

Я отримую такий масив як JSON з API, коли я називаю список країн:

{
"countries": [
    [
        "Andorra",
        "AD"
    ],
    [
        "United Arab Emirates",
        "AE"
    ],
    [
        "Afghanistan",
        "AF"
    ],
    [
        "Antigua and Barbuda",
        "AG"
    ],
    [
        "Anguilla",
        "AI"
    ],
    [
        "Albania",
        "AL"
    ],
    [
        "Armenia",
        "AM"
]]}

Це мій контролер:

def find_countries
    @countries =  CountryStateSelect.countries_collection
    render :json=>{ :countries=> @countries }
  end

Я хочу розділити масив списку країн, як це.

{
    "countries": [
        [
            value:"Andorra",
            key: "AD"
        ],
        [
           value: "United Arab Emirates",
            key:"AE"
        ],
        [
           value: "Afghanistan",
            key:"AF"
        ],
        [
            value:"Antigua and Barbuda",
            key:"AG"
        ]
        ]}

Я не можу визначити значення і ключ. Як відокремити цей JSON-відповідь, як описано вище?

0

5 Відповіді

Вам потрібно зіставити кожен елемент в об'єкті

@countries =  CountryStateSelect.countries_collection.map do |name, code|
  Hash[:key, code, :value, name]
end
1
додано
Завдяки @Ursus. це вирішило мою проблему
додано Автор SreRoR, джерело
Гей, моє задоволення
додано Автор Ursus, джерело
input = {
  "countries": [
    ["Andorra", "AD"],
    ["United Arab Emirates", "AE"]        
  ]
} 

input.
  transform_values do |vals|
    vals.map(&%i[value key].method(:zip)).map(&:to_h)
  end

#⇒ {
#   :countries => [
#     [0] {
#         :key => "AD",
#       :value => "Andorra"
#     },
#     [1] {
#         :key => "AE",
#       :value => "United Arab Emirates"
#     }
#   ]
# }
0
додано

Просто перетворіть масиви в хеші:

h = _ # your input data given

h[:countries].map!{|a| {value: a[0], key: a[1]} }
0
додано

Отримати:

[{:key=>"Andorra", :value=>"AD"}, {:key=>"United Arab Emirates", :value=>"AE"}, ...]

Ви можете зіставити кожен елемент у межах країн, як хеш, де ключ є першим елементом, а значення другим.

CountryStateSelect.countries_collection.each_with_object({}) do |(_, countries), hash|
  hash[:countries] = countries.map { |e| { key: e[0], value: e[1] } }
end

# {:countries=>[{:key=>"Andorra", :value=>"AD"}, {:key=>"United Arab Emirates", :value=>"AE"}, ...}]}
0
додано

Отримати:

[{:key=>"Andorra", :value=>"AD"}, {:key=>"United Arab Emirates", :value=>"AE"}, ...]

Ви можете зіставити кожен елемент у межах країн, як хеш, де ключ є першим елементом, а значення другим.

CountryStateSelect.countries_collection.each_with_object({}) do |(_, countries), hash|
  hash[:countries] = countries.map { |e| { key: e[0], value: e[1] } }
end

# {:countries=>[{:key=>"Andorra", :value=>"AD"}, {:key=>"United Arab Emirates", :value=>"AE"}, ...}]}
0
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram