我有一个json对象,我需要将其转换为新结构
来源json
{
"application.name" : "testing",
"application.button.close" : "close",
"application.button.delete" : "delete",
"module.content" : "admin"
}
预期json
{
"application": {
"name" : "testing",
"button": {
"close": "close",
"delete": "delete"
}
},
"module": {
"content" : "admin"
}
}
我将拆分包含'。'的每个键。签名并将其移动到新对象中。 我试过但没有按预期工作。我的代码详情如下
def convert
result = {}
key_list = {
"application.name" => "testing",
"application.button.close" => "close",
"application.button.delete" => "delete",
"module.content" => "admin"
}
key_list.each { |k, v|
levels = k.split('.')
add_to_hash(result, k, v, levels)
}
end
def add_to_hash(result, key, value, levels)
current_level = levels.first
if(levels.count == 1)
{key => value}
else
levels.shift
unless(result.has_key?(current_level))
result[current_level] = {}
end
result[current_level].merge!( add_to_hash(result[current_level], levels.join('.'), value,levels) )
result
end
end
我正在使用红宝石。谢谢大家!
答案 0 :(得分:1)
请尝试使用此代码。
class Converted
def self.convert
result = {}
key_list = {
"application.name" => "testing",
"application.button.close" => "close",
"application.button.delete" => "delete",
"module.content" => "admin"
}
key_list.each { |k, v|
levels = k.split('.')
add_to_hash(result, k, v, levels)
}
result
end
def self.add_to_hash(result, key, value, levels)
current_level = levels.first
if(levels.count == 1)
{key => value}
else
levels.shift
unless(result.has_key?(current_level))
result[current_level] = {}
end
result[current_level].merge!(add_to_hash(result[current_level], levels.join('.'), value,levels) )
result
end
end
end
Converted.convert