ゴミによって、あなたは#<OpenStruct
と">
を意味するなら、それはプットで呼び出されたときにRubyはオブジェクトを表しだけの方法です。これは開発やデバッグに便利で、文字列、配列、ハッシュ、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
EDIT:
あなたがjob = JSON.parse(json, object_class: OpenStruct)
を使用し、あなたの仕事を変数はOpenStruct Rubyオブジェクトになります。これはjsonファイルから作成されています。
これはjsonオブジェクトとは関係がありません.jsonオブジェクトではないため、.json
ファイルに書き戻して正しい構文を使用することはできません。
OpenStructはto_json
とうまく動作していないようですので、object_class: OpenStruct
を削除し、ハッシュや配列を使用する方がよい場合があります。
このコードは、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"}]}
ガーベジとはどういう意味ですか? –