在Ruby中, 我有一个这样的字符串:
"name":"jucy","id":123,"property":"abc"
我想得到' 123'来自id
。
获得它的简单方法是什么?
我不想创建JSON并解析它,这可能是一种方式,但对于这种情况来说太多了。
答案 0 :(得分:3)
加载JSON解析器并解析它。
是的,你认为这样做太多了。事实并非如此。为什么? An extensive JSON library comes with Ruby。该库可能已经加载。它非常易于使用。它非常快。它非常灵活,您可以使用整个数据结构。
而且,最重要的是,为平衡分隔符(即引号)编写自己的解析器要么做得很好,要么太简单,并且错过了很多边缘情况,如空格或转义。 This answer和this answer就是很好的例子。
唯一需要注意的是你的字符串不是很有效的JSON,它需要围绕它的散列分隔符。
require 'json'
almost_json = '"name":"jucy","id":123,"property":"abc"'
my_hash = JSON.parse('{' + almost_json + '}')
puts my_hash["id"]
答案 1 :(得分:0)
'"name":"jucy","id":123,"property":"abc"'[/"id":(\d+),/, 1].to_i
答案 2 :(得分:0)
除了将JSON字符串转换为哈希值之外,还有以下几种方法。
s = '"name":"jucy","id":123,"property":"abc"'
使用捕获组的正则表达式
s[/\"id\":\s*(\d+)/,1] #=> "123"
正面背后的正则表达
s[/(?<=\"id\":)\d+/] #=> "123"
这需要修复冒号和第一个数字之间的空格数。我假设零空间。
正则表达式\K
(忘记到目前为止匹配的所有内容)
s[/\"id\":\s*\K\d+/] #=> "123"
查找id:
开始的索引,转换为整数并返回字符串
s[s.index('"id":')+5..-1].to_i.to_s #=> "123"
寻找数字......
...如果在您的示例中,子字符串由字符串中的唯一数字组成:
s[/\d+/] #=> "123"