【问题标题】:Filter large json file with Ruby使用 Ruby 过滤大型 json 文件
【发布时间】:2013-04-22 12:14:45
【问题描述】:

作为一个编程的初学者,我正在尝试为我在大学的硕士论文过滤一个 JSON 文件。该文件包含大约 500 个哈希值,其中 115 个是我感兴趣的。

我想做什么:

(1)过滤文件,选择我感兴趣的哈希

(2) 对于每个选定的哈希,只返回一些特定的键

包含哈希(“贷款”)的数组格式:

{"header": {
   "total":546188,
   "page":868,
   "date":"2013-04-11T10:21:24Z",
   "page_size":500},
 "loans": [{
   "id":427853,
   "name":"Peter Pan",
   ...,
   "status":"expired",
   "paid_amount":525,
   ...,
   "activity":"Construction Supplies",
   "sector":"Construction"," },
    ... ]
 }

具体来说,我想要以下内容:

(1) 过滤掉带有“status”:“expired”的“loans”哈希

(2) 仅针对每个此类“过期”贷款返回某些键:“id”、“name”、“activity”、...

(3) 最终,将所有内容导出到一个文件中,我可以在 Excel 中或使用一些统计软件(SPSS 或 Stata)进行分析

到目前为止,我自己的想法是这样的:

require 'rubygems'
require 'json'

toberead = File.read('loans_868.json')
another = JSON.parse(toberead)

read = another.select {|hash| hash['status'] == 'expired'}

puts hash

这显然是完全不完整的。我感到完全迷失了。 现在,我不知道在哪里以及如何继续。尽管已经搜索并阅读了大量关于如何过滤 JSON 的文章...

有没有人可以帮我解决这个问题?

【问题讨论】:

    标签: ruby arrays json parsing filter


    【解决方案1】:

    JSON 将被解析为哈希,'header' 是一个键,'loans' 是另一个键。

    所以在你的 JSON.parse 行之后,你可以这样做

    loans = another['loans']
    

    现在贷款是一个哈希数组,每个哈希代表您的一个贷款。 然后你可以做

    expired_loans = loans.select {|loan| loan['status'] == 'expired'}
    puts expired_loans
    

    得到你想要的输出。

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 2021-03-15
      • 2014-10-29
      • 2014-01-30
      • 1970-01-01
      • 2013-10-18
      相关资源
      最近更新 更多