簡體   English   中英

如何將 hash 中的鍵從字符串轉換為符號?

[英]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"
    }
  }]

將鍵從字符串轉換為符號

將文件解析為 JSON

修復輸入數據后,您可以使用Kernel#openJSON#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM