拆下'-';Ruby中JSON键中的除法器
我正在尝试从TumblrAPI读取一些JSON数据 我使用HashieGem将值作为对象属性读取。这会使阅读更容易/更干净 它变成这样:拆下'-';Ruby中JSON键中的除法器,ruby,json,key-value,Ruby,Json,Key Value,我正在尝试从TumblrAPI读取一些JSON数据 我使用HashieGem将值作为对象属性读取。这会使阅读更容易/更干净 它变成这样: data['post']['title'] regular-title: Mijn eerste post format: html regular-body: <p>post</p> convert_object(JSON.parse('{"something-here":"value","otherkey":{"other-ke
data['post']['title']
regular-title: Mijn eerste post
format: html
regular-body: <p>post</p>
convert_object(JSON.parse('{"something-here":"value","otherkey":{"other-key":"value-value"}}'))
为此:
data.post.title
不幸的是,有些键显示为“-”分隔符,如下所示:
data['post']['title']
regular-title: Mijn eerste post
format: html
regular-body: <p>post</p>
convert_object(JSON.parse('{"something-here":"value","otherkey":{"other-key":"value-value"}}'))
常规标题:Mijn eerste post
格式:html
正规机构:员额
因此,我不能使用post.regular-title。有没有办法将所有的减号(-)替换为下划线(41;)?这样就可以了:
def convert_object(data)
case data
when Hash
data.inject({}) do |h,(k,v)|
h[(k.respond_to?(:tr) ? k.tr('-', '_') : k)] = convert_object(v)
h
end
when Array
data.map { |i| convert_object(i) }
else
data
end
end
您可以这样使用它:
data['post']['title']
regular-title: Mijn eerste post
format: html
regular-body: <p>post</p>
convert_object(JSON.parse('{"something-here":"value","otherkey":{"other-key":"value-value"}}'))
Karaszi Istvan在解决方案上帮了我很多。我在散列中添加了对数组的检查。这样,散列中数组中的散列也将被下划线
def convert_hash(hash)
case hash
when Hash
hash.inject({}) do |h,(k,v)|
h[k.tr('-', '_')] = convert_hash(v)
h
end
when Array
array = hash
number = 0
array.each do
array[number] = convert_hash(array[number])
number += 1
end
array
else
hash
end
end
我不知道为什么我添加了“数字”作为迭代器。不知怎的,hash.each都不起作用。谢谢,你的解决方案帮了我很大的忙。这看起来比我难看的编码要好:)。