简体   繁体   中英

Generate a Key, Value JSON object from a Ruby Object Array

I have a Ruby array of students . Student class has attributes id , name and age .

students = [ 
             {id:"id1",name:"name1",age:"age1"}, 
             {id:"id2",name:"name2",age:"age2"},
             {id:"id3",name:"name3",age:"age3"}
           ]

I want to create a JSON key value object from this array as follows.

json_object = {id1:name1, id2:name2, id3:name3}
input = [ {id:"id1",name:"name1",age:"age1"},
          {id:"id2",name:"name2",age:"age2"},
          {id:"id3",name:"name3",age:"age3"}]

require 'json'
JSON.dump(input.map { |hash| [hash[:id], hash[:name]] }.to_h)
#⇒ '{"id1":"name1","id2":"name2","id3":"name3"}'

Your data is all identical, but if you wanted to generate a hash that took the value of students[n][:id] as keys and students[n][:name] as values you could do this:

student_ids_to_names = students.each_with_object({}) do |student, memo|
  memo[student[:id]] = student[:name]
end

For your data, you'd end up with only one entry as the students are identical: { "id1" => "name1" } . If the data were different each key would be unique on :id .

Once you have a hash, you can call json_object = students_ids_to_names.to_json to get a JSON string.

Give this a go:

students = [ 
             {id:"id1",name:"name1",age:"age1"}, 
             {id:"id2",name:"name2",age:"age2"},
             {id:"id3",name:"name3",age:"age3"}
           ]

json_object = students.each_with_object({}) do |hsh, returning|
  returning[hsh[:id]] = hsh[:name]
end.to_json

In console:

puts json_object
 => {"id1":"name1","id2":"name2","id3":"name3"}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM