Сначала исправьте данные
Сначала исправьте данные JSON. Как было изначально опубликовано, ваш образец ввода не действителен JSON, потому что между параметрами отсутствуют запятые. Исправленный вывод будет следующим:
[{
"id": 1,
"vehicle": "car",
"options": {
"doors": "4",
"make": "Nissan",
"model": "Altima",
"year": "2020"
}
},
{
"id": 2,
"vehicle": "car",
"options": {
"doors": "4",
"make": "Nissan",
"model": "Maxima",
"year": "2020"
}
}]
Преобразование ключей из строк в символы
Разобрать файл как JSON
После исправления входных данных вы может анализировать данные из вашего файла, используя Kernel # open и JSON # load . Например:
require "json"
vehicles = JSON.load open("data.json")
Transform Keys
Затем вам нужно будет преобразовать ваши ключи, используя Hash # transform_keys! и String # to_sym . Например:
vehicles.map do |hash|
# convert top-level keys from String to Symbol
hash.transform_keys! { |key| key.to_sym }
# convert top-level keys in options hash
hash[:options].transform_keys! { |key| key.to_sym }
end
Довольно печатаемый автомобили теперь выдаст следующее:
pp vehicles
[{:id=>1,
:vehicle=>"car",
:options=>{:doors=>"4", :make=>"Nissan", :model=>"Altima", :year=>"2020"}},
{:id=>2,
:vehicle=>"car",
:options=>{:doors=>"4", :make=>"Nissan", :model=>"Maxima", :year=>"2020"}}]
Предостережения
Это решение обрабатывает любое количество ключи на верхнем уровне каждого ha sh и любое количество ключей верхнего уровня в каждом параметре ha sh, но не обрабатывает никакого вложения сверх этого. Если у вас есть нерегулярные JSON объекты с произвольными уровнями вложенных хэшей, вам может потребоваться пройти ha sh на необходимую глубину с помощью других средств.