Reputation: 147
I'm getting some trouble with this JSON:
{
"ENAX-BRANCHESM-10" :
{
"repo":"test-ASO",
"PATH":"/tmp/pruebaAlvaro",
"ARTIFACTS":"example1.jar,another_one.jar,and_another.jar",
"uri":"http://server:8081/artifactory/test-ASO",
"created":"A705663"
},
"QZQP-QZQPMAN-16" : {
"repo": "test-ASO",
"PATH": "/tmp/pruebaAlvaro2",
"ARTIFACTS": "test543.jar,thisisa.jar,yesanother.jar",
"uri": "http://server:8081/artifactory/test-ASO",
"created": "A705663"
}
}
I'm trying to iterate through the lists to get the PATH and the ARTIFACTS values for each list, in the example there are two lists, but really there are dozens. The purpose is to know which artifact is going to be deployed to its own path. For example:
/tmp/pruebaAlvaro
example1.jar
/tmp/pruebaAlvaro
another_one.jar
/tmp/pruebaAlvaro
and_another.jar
/tmp/pruebaAlvaro2
test543.jar
/tmp/pruebaAlvaro2
thisisa.jar
/tmp/pruebaAlvaro2
yesanother.jar
After I searched deeply I still cannot get the solution.
Upvotes: 0
Views: 5193
Reputation: 15156
json = JSON.parse(your_json)
values = json.map { |_, v| { v[:PATH] => v[:ARTIFACTS].split(',') } }
You'll get the nice hash
{
'/tmp/pruebaAlvaro' => ['example1.jar', 'another_one.jar', ...],
'/tmp/pruebaAlvaro2' => [...]
}
And, you can iterate over it:
values.each do |path, artifacts|
artifacts.each do |artifact|
puts path
puts artifact
end
puts
end
You'll get the same output, which you provided in the question
Upvotes: 1