Reputation: 37
I have a json object i need to convert it to new structure
source json
{
"application.name" : "testing",
"application.button.close" : "close",
"application.button.delete" : "delete",
"module.content" : "admin"
}
expected json
{
"application": {
"name" : "testing",
"button": {
"close": "close",
"delete": "delete"
}
},
"module": {
"content" : "admin"
}
}
I will split each of key that contain '.' sign and move it into new object. I have tried but not work as expectation. Details my code are as below
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
I am using ruby. thanks all!
Upvotes: 0
Views: 80
Reputation: 441
Please try like this code.
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
Upvotes: 1