gpt4 book ai didi

ruby - 如何从ruby中的行中提取数据?

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:26 24 4
gpt4 key购买 nike

我有一个 10m 行的文件,每一行都是这样的:

{ "_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 的错误。 split 返回一些乱码。我得到的最接近我期望的结果是 match,但它返回上述示例 "357103 }"

你能帮我解决一下吗?

最佳答案

此处的拆分比正则表达式更快。对于如此大的文件,它可能会产生明显的差异。

此外,您似乎需要转义那些双引号:line.split("\"id\": ")

> puts Benchmark.measure{line.split("\"id\" : ").last.delete('}').delete(' ')}
0.000000 0.000000 0.000000 ( 0.000020)

> puts Benchmark.measure{line.match(/\s(\d+)\s/)[1]}
0.000000 0.000000 0.000000 ( 0.000043)

更新

甚至更快,一路使用拆分:

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

编辑

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

关于ruby - 如何从ruby中的行中提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50127387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com