根据日期字段从特定间隔获取JSON文件

时间:2018-08-06 11:30:28

标签: json bash awk sed hjson

我有很多json文件,其结构如下所示:

{
  key1: 'val1'
  key2: {
          'key21': 'someval1',
          'key22': 'someval2',
          'key23': 'someval3',
          'date': '2018-07-31T01:30:30Z',
          'key25': 'someval4'
  }
  key3: []
  ... some other objects
 }          

我的目标是仅获取日期字段来自某个时期的这些文件。 例如从2018-05-20到2018-07-20。 我无法基于此文件的创建日期,因为所有这些都是在一天内生成的。 也许可以使用sed或类似程序吗?

2 个答案:

答案 0 :(得分:1)

幸运的是,可以将这种格式的日期作为字符串进行比较。您只需要解析JSON的内容,例如Perl:

perl -l -0777 -MJSON::PP -ne '
   $date = decode_json($_)->{key2}{date};
   print $ARGV if $date gt "2018-07-01T00:00:00Z";
' *.json
  • -0777使perl吞噬整个文件,而不是逐行读取它们
  • -lprint
  • 添加换行符
  • $ARGV包含当前正在处理的文件的名称

有关详细信息,请参见JSON::PP。如果您有JSON::XSCpanel::JSON::XS,则可以切换到它们以进行更快的处理。

我不得不修正输入(用'替换",添加逗号等),以使解析器满意。

答案 1 :(得分:-2)

尝试这样:

  1. 查找在线转换器。 (例如:https://codebeautify.org/json-to-excel-converter#)并将Json转换为CSV

  2. 使用Excel打开CSV文件

  3. 过滤数据