如何在ruby中从行中提取数据?

如何在ruby中从行中提取数据?,ruby,Ruby,我有一个10万行的文件,每行如下: { "_id" : ObjectId("567f972cad55ac0797baa773"), "id" : 357103 } 对于每一行,我需要使用它的“id”值做一些事情 到目前为止,我已经: listings.each.with_index do |line, idx| # listing_id = JSON.parse(line).fetch("id") #>> invalid JSON error # line.split('"

我有一个10万行的文件,每行如下:

{ "_id" : ObjectId("567f972cad55ac0797baa773"), "id" : 357103 }
对于每一行,我需要使用它的
“id”
值做一些事情

到目前为止,我已经:

listings.each.with_index do |line, idx|
  # listing_id = JSON.parse(line).fetch("id") #>> invalid JSON error
  # line.split('"id : "') #=> some gibberish
  line.match(/"id" : (.*)/)[1] #=> "357103 }"
parse
抛出一个错误,即行不是有效的json<代码>拆分返回一些胡言乱语。我得到的最接近我期望的结果是
match
,但对于上面的示例
“357103}”
,它返回

你能帮我修一下吗?

你可以使用
\s(\d+)\s
正则表达式,不需要JSON解析

line.match(/\s(\d+)\s/)[1] #=> "357103"
您可以使用
\s(\d+)\s
regex,不需要JSON解析

line.match(/\s(\d+)\s/)[1] #=> "357103"

ID是由所有数字组成的吗?您可以尝试使用一个正则表达式来查找冒号,然后再查找数字列表

Line.match(/"id " : [0-9]+/)
查找后跟任意长度整数的Id

如果有字母和数字,则:

Line.match(/"id" :[[:alnum:]]+/)

ID是由所有数字组成的吗?您可以尝试使用一个正则表达式来查找冒号,然后再查找数字列表

Line.match(/"id " : [0-9]+/)
查找后跟任意长度整数的Id

如果有字母和数字,则:

Line.match(/"id" :[[:alnum:]]+/)

您可以使用拼接进行匹配:

line[/(?<= )\d+/] = 357103

line[/(?您可以使用拼接进行匹配:

line[/(?<= )\d+/] = 357103

line[/(?这里的拆分速度比Regex快。对于如此大的文件,它可能会产生明显的不同

另外,看起来您需要对这些双引号进行转义:
line.split(“\”id\:”)

更新

更快速的是,始终使用拆分:

> puts Benchmark.measure{line.split("\"id\" : ").last.split(' ').first }
  0.000000   0.000000   0.000000 (  0.000008)
编辑


尽管Stefan在评论中提到,看起来您的文件是BSON(MongoDB)而不是JSON。这里有一个Mongo。

这里的拆分速度比正则表达式快。有了这么大的文件,可能会有明显的不同

另外,看起来您需要对这些双引号进行转义:
line.split(“\”id\:”)

更新

更快速的是,始终使用拆分:

> puts Benchmark.measure{line.split("\"id\" : ").last.split(' ').first }
  0.000000   0.000000   0.000000 (  0.000008)
编辑


尽管Stefan在评论中提到,看起来您的文件是BSON(MongoDB)而不是JSON。有一个Mongo。

是格式(应该是)JSON?如果是,那就提出来。不要只是在代码中突然使用JSON方法,并期望读者猜出原因。如果不是JSON,那就不要使用JSON方法。它通常是JSON格式,但我昨晚做了错误的提取,我对ruby一无所知。要么请你们帮忙,要么再等20小时才能正确提取表单atted文件。看起来像MongoDB数据。尝试将其导出为JSON。格式是(应该是)JSON?如果是,那就提出来。不要只是在代码中突然使用JSON方法,并期望读者猜出原因。如果不是JSON,那就不要使用JSON方法。它通常是JSON格式,但我昨晚做了错误的提取,我对ruby一无所知。要么请你们帮忙,要么再等20小时才能正确提取表单atted文件。看起来像MongoDB数据。尝试将其导出为JSON。