我有一个大的 JSON 对象(但 x100+):
[
{
"category": "category1",
"text": "some text"
},
{
"category": "category2",
"text": "some more text"
},
{
"category": "category1",
"text": "even more text"
}
]
我如何将其转化为:
{
"category1": [
{
"text": "some text"
},
{
"text": "even more text"
}
],
"category2": {
"text": "even more text"
}
}
如能提供正确方向的任何帮助,我们将不胜感激。
首先,您需要将 JSON 字符串转换为 Ruby 对象。
require "json"
json = %{
[
{
"category": "category1",
"text": "some text"
},
{
"category": "category2",
"text": "some more text"
},
{
"category": "category1",
"text": "even more text"
}
]
}
ary = JSON.parse(json)
现在我们有了一个 Ruby 形式的哈希数组,我们可以操作它了
h = ary.group_by {|i| i["category"]}
#=> {"category1"=>[{"category"=>"category1", "text"=>"some text"}, {"category"=>"category1", "text"=>"even more text"}], "category2"=>[{"category"=>"category2", "text"=>"some more text"}]}
h = h.map {|k,v| {k => v.map {|t| {"text" => t["text"]}}}}
#=> [{"category1"=>[{"text"=>"some text"}, {"text"=>"even more text"}]}, {"category2"=>[{"text"=>"some more text"}]}]
h = h.reduce(&:merge)
#=> {"category1"=>[{"text"=>"some text"}, {"text"=>"even more text"}], "category2"=>[{"text"=>"some more text"}]}
以漂亮的形式打印 JSON 以检查结果
puts JSON.pretty_generate(h)
输出:
{
"category1": [
{
"text": "some text"
},
{
"text": "even more text"
}
],
"category2": [
{
"text": "some more text"
}
]
}