[英]How can I convert keys in a hash from strings to symbols?
我是 Ruby 的新手。 我正在嘗試導入文件並將其用作某種格式的變量。
JSON 文件片段(data.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:
[{: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"}}]
我想將鍵更改為符號。 所以我想要:id=>1
而不是"id"=>1
>1 。 我在轉換選項哈希時遇到問題,因為它們是嵌套的。
目前我有:
data = File.read("data.json")
但這不起作用。
首先,修復您的 JSON 數據。 正如最初發布的那樣,您的示例輸入無效JSON 因為它在選項之間缺少逗號。 更正 output 如下:
[{
"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"
}
}]
修復輸入數據后,您可以使用Kernel#open和JSON#load解析文件中的數據。 例如:
require "json"
vehicles = JSON.load open("data.json")
接下來,您需要使用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"}}]
此解決方案處理每個 hash 頂層的任意數量的鍵,以及每個選項 hash 中的任意數量的頂層鍵,但不處理除此之外的任何嵌套。 如果您有不規則的 JSON 對象和任意級別的嵌套哈希,您可能需要通過其他方式將 hash 移動到您需要的任何深度。
File.read
僅將文件讀取為字符串,但不會將內容解析為 json。
require 'json'
file = File.read('data.json')
data = JSON.parse(file)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.