如果垃圾,你的意思是#<OpenStruct
和">
,它只是在與看跌期權稱爲紅寶石代表對象的方式。它對於開發和調試非常有用,並且使它更易於理解String,Array,Hash和OpenStruct之間的區別。
如果你只是想顯示的名稱和羣集名稱,而不是其他:
puts job.Job
job.Skills.each do |skill|
puts skill.Name
puts skill.ClusterName
end
它返回:
My Job 1
Name 1
Cluster Name 1 Skills
Name 2
Cluster Name 2 Skills
編輯:
當您使用job = JSON.parse(json, object_class: OpenStruct)
,你的工作變量變成一個OpenStruct Ruby對象,它是從json文件創建的。
它和json沒有任何關係:它不再是json對象,所以你不能把它寫回.json
文件,並期望它具有正確的語法。
OpenStruct似乎不適合to_json
,所以刪除object_class: OpenStruct
可能更好,只需使用散列和數組。
此代碼讀取1.json
,將其轉換爲Ruby對象,增加了一個技能,修改作業名,對象寫入2.json
,並再次把它讀成JSON檢查一切正常。
require 'json'
json = File.read('1.json')
job = JSON.parse(json)
job["Skills"] << {"Name" => "Name 3", "ClusterName" => "Cluster Name 3 Skills"}
job["Job"] += " (modified version)"
# job[:Fa] = 'blah'
File.open('2.json', 'w'){|out|
out.puts job.to_json
}
require 'pp'
pp JSON.parse(File.read('2.json'))
# {"Job"=>"My Job 1 (modified version)",
# "Skills"=>
# [{"Name"=>"Name 1", "ClusterName"=>"Cluster Name 1 Skills"},
# {"Name"=>"Name 2", "ClusterName"=>"Cluster Name 2 Skills"},
# {"Name"=>"Name 3", "ClusterName"=>"Cluster Name 3 Skills"}]}
你是什麼意思,垃圾? –