Как вывести строку внутри хеша в Rails 6

avatar
Andy
8 августа 2021 в 19:31
46
1
0

Я использую HTTParty для получения некоторой информации в Интернете, которая возвращает хэш. Хэш хранится в @response. При печати @response я получаю:

{"total":1,"page":0,"page_size":500,"result":[{"token_address":"0x495f947276749ce646f68ac8c248420045cb7b5e","token_id":"93621450588507963380282193080403618089126431025205794831153795070541439172609","amount":"1","owner_of":"0x0370dc008463c37b6a04c13ca3348aba11095eec","block_number":"12964809","block_number_minted":"12175962","contract_type":"ERC1155","token_uri":"https://api.opensea.io/api/v1/metadata/0x495f947276749Ce646f68AC8c248420045cb7b5e/93621450588507963380282193080403618089126431025205794831153795070541439172609","metadata":"{\"name\":\"Club Legends #44 | Henrik - Celtic\",\"description\":\"Club Legends #44\\n\\nHenrik - Celtic\\n\\nNFT soccer collectibles by 8-Bit Sport.\",\"external_link\":\"https://twitter.com/8bitsport\",\"image\":\"https://lh3.googleusercontent.com/TgK-N_jozTkHIw6nUTnugU7MOMGWTNiYFlrxTY63Cbx7GtajExIeOPv2bBrqhJL0VRA6fdpT3yVDc9Kq62jJxd8H7rPLq0YaviWi\",\"animation_url\":null}","synced_at":"2021-06-23T17:40:18.322Z","name":"OpenSea Shared Storefront","symbol":"OPENSTORE"}]}

Я хотел бы получить name внутри metadata и, следовательно, распечатать "Club Legends #44 | Henrik - Celtic\". Как мне это сделать?

Источник
Les Nightingill
8 августа 2021 в 22:20
1

JSON.parse(@response["metadata"]) предоставляет метаданные в виде хэша. Затем вытащите нужные значения с помощью клавиш (например, «имя»)

Ответы (1)

avatar
SwatVI
9 августа 2021 в 14:04
0

Я бы использовал следующий код:

JSON.parse(@response.dig(:result, 0, :metadata) || '{}').dig('name')

Это вернет строку "Club Legends #44 | Henrik - Celtic" для приведенного выше хэша, и если какой-либо из вложенных хэшей не может быть найден (например, хеш metadata отсутствует), вы получите nil вместо ошибки .