JSON, 당신은 #<OpenStruct
및 ">
을 의미, 그것은 풋 호출 할 때 루비 객체를 나타냅니다 다만 방법이다. 개발 및 디버깅에 유용하며 문자열, 배열, 해시 및 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)
를 사용
, 작업을 변수는 json 파일에서 생성 된 OpenStruct Ruby 객체가됩니다.
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"}]}
무엇을 의미합니까, 쓰레기? –