【发布时间】:2019-04-20 07:08:03
【问题描述】:
我正在使用 json-compare gem 来比较两个不同的 json 文件。
示例文件 1:
{"suggestions": [
{
"id1": 1,
"title1": "Test",
"body1": "Test"
}
]
}
示例文件 2:
{"suggestions": [
{
"id2": 1,
"title2": "Test",
"body2": "Test"
}
]
}
gem 运行良好,并吐出如下所示的哈希:
{:update=>
{"suggestions" =>
{:update=>
{0=>
{:append=>
{"id2"=>1, "title2"=>"Test", "body2"=>"Test"},
:remove=>
{"id1"=>1, "title1"=>"Test", "body1"=>"Test"},
}
}
}
}
}
如何解析并返回所有更改 json Keys 的地方?为了简单起见,我将如何输入控制台:
id1 changed to id2
title1 changed to title2
body1 changed to body2
出于我正在构建的目的,我不需要知道值的变化。我只需要知道 id1 变成了 id2 等等。
【问题讨论】:
-
你说的“
id2改成id1”是什么意思?你如何从哈希中推断出来?:update、:append和:remove是否对问题具有重要意义? (我不熟悉 gem。)请编辑您的问题以提供进一步的解释。 -
用 json 文件的例子更新了问题。 :append 等由 gem 注入到哈希中。
-
如果
h是gem 返回的哈希值arr = h[:update]["suggestions"][:update][0] => {:append=>{"id2"=>1, "title2"=>"Test", "body2"=>"Test"}, :remove=>{"id1"=>1, "title1"=>"Test", "body1"=>"Test"}},您可以从中计算pairs = g[:append].keys.zip(arr[:remove].keys) #=> [["id2", "id1"], ["title2", "title1"], ["body2", "body1"]]这提供了puts语句所需的值。这是你想要的吗?然而,这并不普遍。
标签: ruby-on-rails json ruby hash