[英]How can I get hash from string and then string from hash back in javascript
[英]How can I select keys from a hash in Ruby with a string of javascript?
我正在使用Ruby中的命令行工具进行工作,该工具可以分析来自各种来源的JSON并处理数据。 我希望用户能够将该工具与任何JSON源一起使用,因此gem从用户提供的YAML文件中读取一些基本配置,如下所示:
# config.yml
json_sources:
sourcea:
url: 'https://example.com/some/json/api.json'
list_key: 'response.items'
name_key: 'name'
sourceb:
url: 'https://otherexample.org/another/api.json'
list_key: ''
name_key: 'basics.name'
在此示例中,从https://example.com/some/json/api.json
返回的JSON如下所示:
{
"response": {
"items": [
{
"id": 1,
"name": 'Item 1'
},
{
"id": 2,
"name": 'Item 2'
}
]
}
}
来自https://otherexample.org/another/api.json
的JSON如下所示:
[
{
"basics": {
"name": "Other Item 1"
}
},
{
"basics": {
"name": "Other Item 2"
}
}
]
在每种情况下, url
是JSON的URI, list_key
是应在JSON中进行迭代的键, name_key
是我们要从每个对象获取的键。 因此,我的问题是,在Ruby中,我应该如何解析list_key
和name_key
?
Ruby中是否有一些便捷的方法来获取带有一串javascript样式选择器的哈希中的键值,还是我自己应该为它编写一个方法?
我最喜欢Javascript的一件事是可以使用object.property
以及object["property"]
访问对象的属性的方式。 在Ruby中,您只能使用hash["value"]
访问hash["value"]
。
要回答您的问题,您将需要找到一种转换list_key
和name_key
的方法,以便它可以在Ruby中使用。 做到这一点的最佳方法首先取决于您如何处理JSON的解析,但是我应该像将list_key
和name_key
拆分为一个name_key
数组然后访问哈希值一样简单。
希望能有所帮助。
由于没有人有更好的答案,所以我继续写了一个方法:
def get_value_from_selector(hash, selector_string)
selectors = selector_string.split '.'
selectors.each do |selector|
hash = hash[selector] if hash
end
hash
end
我这样称呼它:
raw_json_string = '{ "response": { "name": "foo" } }'
json = JSON.parse raw_json_string
x = get_value_from_selector json, 'response.name'
这将x
设置为'foo'
。
此方法有效,但不支持['square_bracket']
表示法或任何其他JavaScript。 我敢肯定,我可以修改该方法以在以后做,但是现在可以用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.