2015-02-12 66 views
1

我目前正在下載大量的jira問題來生成報告。目前,「全數據」文件中有這樣一噸的個人記錄:在同一個文件中合併多個json數組

{ 
    "key": "645", 
    "type": "Bug", 
    "typeid": "1", 
    "status": "Closed", 
    "summary": "Crash when saving document", 
    "closedDate": "2014-10-03T09:01:23.000+0200", 
    "flag": null, 
    "fixVersionID": "123", 
    "fixVersionName": "2.7" 
} 

但是,因爲我下載多個版本,並追加到同一個文件我結束了這種結構。

[ 
    { 
    "key": "645", 
    "type": "Bug", 
    "typeid": "1", 
    "status": "Closed", 
    "summary": "Crash when saving document", 
    "closedDate": "2014-10-03T09:01:23.000+0200", 
    "flag": null, 
    "fixVersionID": "123", 
    "fixVersionName": "2.7" 
    } 
] 
[ 
    { 
    "key": "552", 
    "type": "Bug", 
    "typeid": "1", 
    "status": "Closed", 
    "summary": "Graphical Issue", 
    "closedDate": "2014-10-13T09:01:23.000+0200", 
    "flag": null, 
    "fixVersionID": "456", 
    "fixVersionName": "2.8" 
    } 
] 

我想要做的是有一個特定的日期來算的記錄數,然後使用jq

通過起始日期做同樣的循環結束日期,但我想不通如何:

  1. 拼合的記錄,以便他們一個陣列不是兩個
  2. 地帶T09:01:23.000+0200從closedDate值
  3. 計算具有特定日期值的對象的數量,例如2014-10-13
+0

其實,我想出如何帶'T09:01:23.000 + 0200'。當你映射jira問題時:'map({closedDate:.fields.resolutiondate [0:10]})'這會給你前十個字符。 – TheMightyLlama 2015-02-12 08:09:55

+0

'grep'2014-10-13'some.json | wc -l'不足以得到計數嗎? – pratZ 2015-02-12 08:22:05

+0

@pratZ它會,但我想要一個稍微乾淨的解決方案。我知道jq有最大和最小功能,並且正在尋找類似的東西。但是,如果grep做到了,那就這麼做吧。真正的問題是數組的扁平化。 – TheMightyLlama 2015-02-12 08:28:22

回答

1

您有多個獨立輸入。爲了能夠以任何有意義的方式將它們結合起來,你必須汲取輸入。輸入將被視爲輸入數組。然後你可以通過add將它們組合成一個單一的數組。

由於日期都是以某種固定的格式顯示,所以您可以使用日期的子字符串。

"2014-10-13T09:01:23.000+0200"[:10] -> "2014-10-13" 

鑑於這種情況,然後你可以通過你想要的日期過濾和使用length過濾器計數。

add | map(select(.closedDate[:10]=="2014-10-13")) | length 

例如,

$ cat input.json 
[ 
    { 
    "key": "645", 
    "type": "Bug", 
    "typeid": "1", 
    "status": "Closed", 
    "summary": "Crash when saving document", 
    "closedDate": "2014-10-03T09:01:23.000+0200", 
    "flag": null, 
    "fixVersionID": "123", 
    "fixVersionName": "2.7" 
    } 
] 
[ 
    { 
    "key": "552", 
    "type": "Bug", 
    "typeid": "1", 
    "status": "Closed", 
    "summary": "Graphical Issue", 
    "closedDate": "2014-10-13T09:01:23.000+0200", 
    "flag": null, 
    "fixVersionID": "456", 
    "fixVersionName": "2.8" 
    } 
] 
$ jq -s 'add | map(select(.closedDate[:10]=="2014-10-13")) | length' input.json 
1 
+0

雖然這對貓來說是無用的。 – tripleee 2015-02-12 08:42:36

+0

梅,根據需要插入所需的輸入方法。對於一個文件,是的,沒用,但我不知道實際來源是什麼,但不管它是什麼,它可能都是通過管道輸入的。 – 2015-02-12 08:45:28

+0

@JeffMercado輸入源是對jira的curl調用,它具有上限檢索的對象數量。所以我必須進行順序調用並將它們寫入文件。我希望我知道爲什麼這是無用的。這對我來說似乎很有用! – TheMightyLlama 2015-02-12 09:18:32

1

問題1和2:

$ echo -e "[\n$(sed '/^[][]$/d;/closedDate/s/\(T[^"]*\)//g' json)\n]" > flat-json 

要計數特殊的日子數:

$ grep "closedDate" flat-json | grep "2014-10-13" | wc -l 
+0

這工作完美,但我更喜歡上述解決方案。謝謝! – TheMightyLlama 2015-02-12 11:50:19

相關問題