簡體   English   中英

用jq將過濾后的json轉換成csv

[英]Convert json filtered into csv with jq

我有看起來像這樣的文件:

$ cat sample-test.json |jq .
{
  "logRef": "c4fa4367-23f6-462f-b5fd-f972d0916a30",
  "timestamp": 1563268297545,
  "someOtherField": "nonImportantValue"
}
{
  "logRef": "c4fa4367-23f6-462f-b5fd-f972d0916a31",
  "timestamp": 1563268297595,
  "someOtherField2": "nonImportantValue3"
}

我想像這樣將其轉換為 csv:

logRef;timestamp
c4fa4367-23f6-462f-b5fd-f972d0916a30;1563268297545
c4fa4367-23f6-462f-b5fd-f972d0916a31;1563268297595

我在嘗試

$ cat sample-test.json |jq '.logRef, .timestamp |@csv'
jq: error (at <stdin>:1): string ("c4fa4367-2...) cannot be csv-formatted, only array
jq: error (at <stdin>:2): string ("c4fa4367-2...) cannot be csv-formatted, only array

您的輸入很好(它是一個 JSON 流)。

您的過濾器的問題在於@csv需要一個數組。 所以這將起作用:

[.logRef,.timestamp] | @csv

但是它引用了字符串,所以如果你希望你的字符串不加引號(這可能意味着結果不會是 CSV),那么你可以使用:

"\(.logRef),\(.timestamp)"

在所有情況下,您都需要使用 jq 的-r命令行選項。

您的 json 文件中的問題。 看起來它的格式不正確(沒有根數組元素[]和文檔之間的逗號)。 如果您修復它, jq將按預期工作。

> cat sample-test.json 
[{
  "logRef": "c4fa4367-23f6-462f-b5fd-f972d0916a30",
  "timestamp": 1563268297545,
  "someOtherField": "nonImportantValue"
},
{
  "logRef": "c4fa4367-23f6-462f-b5fd-f972d0916a31",
  "timestamp": 1563268297595,
  "someOtherField2": "nonImportantValue3"
}]
cat sample-test.json |jq -r 'map(.logRef), map(.timestamp) | @csv'
"c4fa4367-23f6-462f-b5fd-f972d0916a30","c4fa4367-23f6-462f-b5fd-f972d0916a31"
1563268297545,1563268297595

我還使用map()函數修復了該命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM