이 json을 변환할 수 있습니까?
[
{
"bytes": 276697,
"checked": false
},
{
"bytes": 276697,
"checked": false
}
]
jq에 헤더가 있는 테이블로?
나는 시도했다:
cat file.json | jq '.[] | join(",")'
그러나 헤더가 생략되었습니다.
"276697,false"
"276697,false"
그것은해야한다:
"bytes,checked"
"276697,false"
"276697,false"
두 가지 명령만 실행해 보세요.
cat file.json | jq '.[] | keys, .[] | join(",")'
그러나 두 번째는 실패합니다.
"bytes,checked"
jq: error (at <stdin>:64): Cannot iterate over null (null)
이상적으로는이것.
답변1
목록의 첫 번째 요소의 키에서 제목을 문자열 배열로 선택한 다음 모든 요소의 값을 별도의 배열로 추출할 수 있습니다. @csv
결과 목록의 각 요소에 출력 연산자를 적용하면 CSV 형식의 데이터가 참조됩니다( jq
모든 문자열, 부울이나 숫자 제외).
$ jq -r '[first|keys] + map([.[]]) | .[] | @csv' file
"bytes","checked"
276697,false
276697,false
또는,
$ jq -r '(first|keys), (.[]|[.[]]) | @csv' file
"bytes","checked"
276697,false
276697,false
또는,
$ jq -r '(first|keys), map(map(.))[] | @csv' file
"bytes","checked"
276697,false
276697,false
또는 값을 별도의 배열로 추출하는 다른 방법.
이는 입력 데이터 전체에서 동일한 순서로 나타나는 키에 의존한다는 점에 유의하세요.
그러나 사용하기가 더 쉽습니다.밀러( mlr
):
$ mlr --j2c cat file
bytes,checked
276697,false
276697,false
이는 간단히 Miller의 명령을 통해 데이터를 전달하는 동시에 cat
(이 방법을 사용하면 데이터가 수정되지 않음) 옵션 --j2c
(약어 --ijson --ocsv
)을 사용하여 데이터를 JSON에서 CSV로 변환합니다. Miller는 CSV를 올바르게 인식하므로 실제로 참조해야 하는 필드만 참조합니다.
다음 명령을 사용하여 예쁜 인쇄 출력 형식을 선택하여 올바른 형식의 테이블을 얻을 수도 있습니다 --barred
.
$ mlr --j2p --barred cat file
+--------+---------+
| bytes | checked |
+--------+---------+
| 276697 | false |
| 276697 | false |
+--------+---------+
( --j2p
yes 의 약어입니다 --ijson --opprint
.)
아니면 --barred
:
$ mlr --j2p cat file
bytes checked
276697 false
276697 false
답변2
알겠어요:
cat file.json | jq '(.[0] | keys), .[] | join(",")'
스트림을 "소비"하는 것을 방지하기 위해 괄호 안에 어떤 부분이라도 넣을 수 있는 것 같습니다(이것이 이름인지 또는 jq 문서에서 아무것도 찾을 수 없기 때문에 여기에 가져오는 것인지는 모르겠습니다. 그리고 거기에 다양한 블로그와 스택오버플로에 흩어져 있는 조각들로 모든 것을 하나로 묶는 작업이 필요하므로 이 작업을 수행하는 "올바른" 방법이 있다면 알려주시기 바랍니다.
그런데, 나와 같은 쉘 for 루프가 있는 경우 -s 옵션을 사용하여 별도의 json 개체를 결합합니다.
$ for i in {3,4,5,8}
do rclone rc core/stats --rc-user USER --rc-pass PASS --rc-addr :557$i
done | jq -rs '(.[0] | keys), .[] | join(",")' | column -ts,
bytes checks deletedDirs deletes elapsedTime errors eta fatalError renames retryError speed totalBytes totalChecks totalTransfers transferTime transfers
1660182 0 0 0 258038.009782457 0 0 false 0 false 1664.9322505627426 1660182 0 6 0 6
407752609 0 0 0 258038.054874325 0 0 false 0 false 10615.04533495996 407752609 0 86 0 86
7403585 0 0 0 258038.103563555 0 0 false 0 false 20892.381593377457 7403585 0 2 0 2
0 0 0 0 258038.156466825 0 false 0 false 0 0 0 0 0 0