Wenn von Müll, meinen Sie #<OpenStruct
und ">
ist es genau so, wie Ruby-Objekte darstellt, wenn sie mit Puts genannt. Es ist nützlich für die Entwicklung und das Debugging, und es macht es einfacher, den Unterschied zwischen einem String, einem Array, einem Hash und einem OpenStruct zu verstehen.
Wenn Sie nur den Namen und die Cluster-Namen angezeigt werden, und nichts anderes:
puts job.Job
job.Skills.each do |skill|
puts skill.Name
puts skill.ClusterName
end
Es gibt:
My Job 1
Name 1
Cluster Name 1 Skills
Name 2
Cluster Name 2 Skills
EDIT:
Wenn Sie job = JSON.parse(json, object_class: OpenStruct)
, Ihren Job Variable wird zu einem OpenStruct Ruby-Objekt, das aus einer JSON-Datei erstellt wurde.
Es hat jedoch nichts mit json zu tun: Es ist kein Json-Objekt mehr, Sie können es also nicht einfach in eine .json
-Datei schreiben und erwarten, dass es die korrekte Syntax hat.
OpenStruct scheint nicht gut mit to_json
zu funktionieren, so dass es besser sein könnte, object_class: OpenStruct
zu entfernen, und einfach mit Hashes und Arrays arbeiten.
Dieser Code liest 1.json
, wandelt es in ein Ruby-Objekt, fügt eine Fertigkeit, ändert den Namen des Auftrags, schreibt das Objekt 2.json
und liest es wieder als JSON zu überprüfen, ob alles hat gut funktioniert.
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"}]}
Was meinst du, Müll? –