合并json并删除重复的ruby rails

时间:2013-10-29 17:05:54

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我有以下json

假设我在移动设备中进行选择,则会生成此字段

{"Style":"convertible","Year":"2010","Color":"green"}
{"Style":"convertible","Year":"2010","Color":"red"}

如果我的选择是自行车,那么这个领域将被生成

{"model":"2012","mileage":"20kmph","Color":"red"}

我如何达到上述效果。

修改-1

我有一个表单,其中一些字段可以根据类别选择自动生成。我已将自动生成的字段转换为json并作为单列存储在数据库中。 Image url

我不知道如何解释你能理解我在寻找什么。查看我的屏幕截图以便更好地理解

1 个答案:

答案 0 :(得分:0)

我假设(出于一些疯狂的原因)你将使用Ruby来做到这一点。

但首先,您的预期输出是错误的,因为您不能使用重复键的哈希:

{"Color": "green", "Color": "red"}

......是不可能的。 “年”键也是如此。将哈希中的键视为Highlanders。只有一个(同名)。因此,您的实际预期输出将是:

{"Style":"convertible", "Year":"2012", "Color":"red", "name":"test"}

或者其他什么。总之...

第1步:将JSON转换为Ruby Hash

require 'json'
converted = JSON.parse '[{"Style":"convertible","Year":"2010","Color":"green"},
{"Style":"convertible","Year":"2010","Color":"red"},
{"name":"test","Year":"2012","Color":"red"}]'

第2步:合并它们

merged = {}
converted.each { |c| merged.merge! c }

现在合并的变量看起来应该与上面的实际预期输出相似。

剩下的唯一问题是决定哪些重复键覆盖哪些其他重复键。这里重要的是合并哈希的顺序。最后合并的那些将覆盖任何现有的重复键/值。希望有所帮助。