Я пытаюсь получить некоторые ключи/значения из хэша, но не нашел лучший способ сделать это. Кроме того, мне нужно поместить результаты в таблицу с ключами в качестве заголовков столбцов.
Я пробовал 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_hash[:results].map! { |str| JSON.parse(str) }
Хотя я надеюсь, что у вас там опечатка, потому что JSON недействителен. За \u
должны следовать 4 шестнадцатеричных цифры, но у вас есть
{"tag":"Name\uwest-1a","value":"st-1a","key":"Name"}
что бред.
возможно, добавьте комментарий, что .map!
изменяет json_hash
Эта операция не является идемпотентной, следует предпочесть привязку map
к обработчикам.
@AlekseiMatiushkin правда, если вы хотите бережно сохранить свои мусорные данные, вы должны вместо этого использовать map
Добро пожаловать в СО! «Хэш» содержит строку в кодировке JSON, поэтому первое, что нужно сделать, — это декодировать ее в хэш Ruby массивов.
JSON[string]
сделает это для строк JSON. Всегда важно понимать данные, поступающие в ваш код. Пожалуйста, убедитесь, что ваш код и связанные с ним данные можно использовать, иначе мы будем крутить колеса, пытаясь вам помочь. Пожалуйста, прочтите "Макви".