Как получить значение ключа из вложенного хеша с escape-символами

Я пытаюсь получить некоторые ключи/значения из хэша, но не нашел лучший способ сделать это. Кроме того, мне нужно поместить результаты в таблицу с ключами в качестве заголовков столбцов.

Я пробовал map, select и dig, но получаю разные ошибки.

require 'json'

json_hash = {:results=>["{\"resourceId\":\"i-5ee33\",\"configuration\":{\"instanceType\":\"m4.2xlarge\"},\"tags\":[{\"tag\":\"aws:au\\u003db\",\"value\":\"b-1a\",\"key\":\"awsss\"},{\"tag\":\"Kernluster\\ulues\",\"value\":\"blu\",\"key\":\"Kster\"},{\"tag\":\"Kuole\\udter\",\"value\":\"master\",\"key\":\"Kule\"},{\"tag\":\"Name\\uwest-1a\",\"value\":\"st-1a\",\"key\":\"Name\"}]}"], :query_info=>{:select_fields=>[{:name=>"[FILTERED]"}, {:name=>"[FILTERED]"}, {:name=>"[FILTERED]"}]}, :next_token=>"YwutZrD0Ow9Qh3HoYbiC"}

keys_to_extract = ['resourceId', 'instanceType', 'tags']
x = json_hash.map do |w|
  w.select { |k,_| keys_to_extract.include? k }
end

puts x

Результаты ошибок не показаны.

Добро пожаловать в СО! «Хэш» содержит строку в кодировке JSON, поэтому первое, что нужно сделать, — это декодировать ее в хэш Ruby массивов. JSON[string] сделает это для строк JSON. Всегда важно понимать данные, поступающие в ваш код. Пожалуйста, убедитесь, что ваш код и связанные с ним данные можно использовать, иначе мы будем крутить колеса, пытаясь вам помочь. Пожалуйста, прочтите "Макви".

the Tin Man 31.05.2019 00:30
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
122
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Большая часть содержимого по-прежнему находится в строке JSON. Вам нужно разобрать их, чтобы Ruby мог получить к ним доступ:

json_hash[:results].map! { |str| JSON.parse(str) }

Хотя я надеюсь, что у вас там опечатка, потому что JSON недействителен. За \u должны следовать 4 шестнадцатеричных цифры, но у вас есть

{"tag":"Name\uwest-1a","value":"st-1a","key":"Name"}

что бред.

возможно, добавьте комментарий, что .map! изменяет json_hash

lacostenycoder 30.05.2019 14:58

Эта операция не является идемпотентной, следует предпочесть привязку map к обработчикам.

Aleksei Matiushkin 30.05.2019 14:58

@AlekseiMatiushkin правда, если вы хотите бережно сохранить свои мусорные данные, вы должны вместо этого использовать map

Max 30.05.2019 15:04

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