在Ruby中将JSON转换为多维数组
如何将JSON数据字符串转换为多维数组在Ruby中将JSON转换为多维数组,ruby,json,Ruby,Json,如何将JSON数据字符串转换为多维数组 # Begin with JSON json_data = "[ {"id":1,"name":"Don"}, {"id":2,"name":"Bob"}, ... ]" # do something here to convert the JSON data to array of arrays. # End with multidimensional arrays array_data = [ ["id", "name"],
# Begin with JSON
json_data = "[
{"id":1,"name":"Don"},
{"id":2,"name":"Bob"},
...
]"
# do something here to convert the JSON data to array of arrays.
# End with multidimensional arrays
array_data = [
["id", "name"],
[1,"Don"],
[2,"Bob"],
...
]
这应该可以做到:
require 'json'
json_data = '[{"id":1,"name":"Don"},{"id":2,"name":"Bob"}]'
JSON.parse(json_data).inject([]) { |result, e| result + [e.keys, e.values] }.uniq
首先,我们用JSON.parse
将JSON读入一个数组。对于JSON中的每个元素,我们使用inject
收集所有键和值,这将产生以下数组:
[
["id", "name"],
[1, "Don"],
["id", "name"],
[2, "Bob"]
]
为了消除重复的键数组,我们调用uniq
,并完成
[
["id", "name"],
[1, "Don"],
[2, "Bob"]
]
这应该可以做到:
require 'json'
json_data = '[{"id":1,"name":"Don"},{"id":2,"name":"Bob"}]'
JSON.parse(json_data).inject([]) { |result, e| result + [e.keys, e.values] }.uniq
首先,我们用JSON.parse
将JSON读入一个数组。对于JSON中的每个元素,我们使用inject
收集所有键和值,这将产生以下数组:
[
["id", "name"],
[1, "Don"],
["id", "name"],
[2, "Bob"]
]
为了消除重复的键数组,我们调用uniq
,并完成
[
["id", "name"],
[1, "Don"],
[2, "Bob"]
]
除了@tessi的答案之外,如果我们将“with_index”和“inject”结合起来,就可以避免使用“uniq”
require 'json'
json_data = '[{"id":1,"name":"Don"},{"id":2,"name":"Bob"}]'
array_data = JSON.parse(json_data).each.with_index.inject([]) { |result, (e, i)| result + (i == 0 ? [e.keys, e.values] : [e.values]) }
puts array_data.inspect
结果是:
[["id", "name"], [1, "Don"], [2, "Bob"]]
除了@tessi的答案之外,如果我们将“with_index”和“inject”结合起来,就可以避免使用“uniq”
require 'json'
json_data = '[{"id":1,"name":"Don"},{"id":2,"name":"Bob"}]'
array_data = JSON.parse(json_data).each.with_index.inject([]) { |result, (e, i)| result + (i == 0 ? [e.keys, e.values] : [e.values]) }
puts array_data.inspect
结果是:
[["id", "name"], [1, "Don"], [2, "Bob"]]
为了可读性和效率,我会这样做:
require 'json'
json_data = '[{"id":1,"name":"Don"},{"id":2,"name":"Bob"}]'
arr = JSON.parse(json_data)
#=> "[{\"id\":1,\"name\":\"Don\"},{\"id\":2,\"name\":\"Bob\"}]"
keys = arr.first.keys
#=> ["id", "name"]
arr.map! { |h| h.values_at(*keys) }.unshift(keys)
#=> [["id", "name"], [1, "Don"], [2, "Bob"]]
为了可读性和效率,我会这样做:
require 'json'
json_data = '[{"id":1,"name":"Don"},{"id":2,"name":"Bob"}]'
arr = JSON.parse(json_data)
#=> "[{\"id\":1,\"name\":\"Don\"},{\"id\":2,\"name\":\"Bob\"}]"
keys = arr.first.keys
#=> ["id", "name"]
arr.map! { |h| h.values_at(*keys) }.unshift(keys)
#=> [["id", "name"], [1, "Don"], [2, "Bob"]]