jq의 사용 방법 총결
그 다음에 []등을 추가하는 방법
전에
,
가 없었으면 error가 나올 것 같았어요(심리적 작용일지도 몰라요. 제가 해봤어요)현재,
가 없어도 다음 json에는 error가 나타나지 않기 때문에 나중에 추가적인 방법을 사용할 수 있습니다.[1]
하고 싶어서 추가[]
도 했어요.jq -s ".|= .+[]"
{
"user" : "syui",
"id" : "1"
}
{
"user" : "test",
"id" : "2"
}
$ cat tmp.json|jq -s ".|= .+[]"
[
{
"user" : "syui",
"id" : "1"
},
{
"user" : "test",
"id" : "2"
}
]
U+0000 error의 경우
jq-1.5
부터 줄 바꾸기를 포함하면 다음과 같은 error가 발생합니다. 정말 번거롭습니다.$ echo "{\"text\":\"$text\"}"|jq .
parse error: Invalid string: control characters from U+0000-through-U+001F must be escaped at line 3, column 23
의 주요 회피 전략은 다음과 같다.특수 문자 등이 포함된 경우에도 유효합니다.jq -n --arg var "$var"
jq -R tmp.txt
$ jq -n --arg text "$text" "{\"text\":\$text}"
$ text=`echo $text | jq -R`
$ echo "{\"text\":$text}" | jq .
\$text
와 $text
의 차이점을 주의하십시오.줄 바꿈 삭제
jq <<< $text
$ jq . <<< $text
큰따옴표 취소 시
이것은
-r
의 옵션입니다.자주 사용하지만 간과하기 쉽다.jq -r ".user"
$ cat tmp.json|jq -r ".[].user"
syui
test
키 추출 값을 지정할 때
jq "select(.name == \"syui\")
$ cat tmp.json
[
{
"user" : "syui",
"id" : "1"
},
{
"user" : "test",
"id" : "2"
}
]
$ cat tmp.json|jq -r ".[]|select(.user == \"syui\")"
{
"user": "syui",
"id": "1"
}
키가 있으면 그 키의 값을 꺼내는 경우
비
null
를 조건으로 검색합니다.jq "select(.user !=null)"
$ cat tmp.json
[
{
"user" : "syui",
"id" : "1"
},
{
"user" : "test",
"id" : "2"
}
]
$ cat tmp.json|jq -r ".[]|select(.user !=null)|.user"
syui
test
배열 수를 찾을 때
jq length
$ cat tmp.json
[
{
"user" : "syui",
"id" : "1",
"link" : "syui.cf"
},
{
"user" : "test",
"id" : "2",
"link" : "example.com"
}
]
$ cat tmp.json|jq length
2
$ cat tmp.json|jq ".[]|length"
3
3
$ cat tmp.json|jq ".[]|select(.user == \"syui\")|length"
3
키가 있는지 없는지 알아봐.
jq "has(\"user\")"
$ cat tmp.json|jq ".[]|has(\"user\")"
true
true
두 파일을 병합할 때
jq -s add tmp.json tmp2.json
[
{
"user" : "syui",
"id" : "1",
"link" : "syui.cf"
},
{
"user" : "test",
"id" : "2",
"link" : "example.com"
},
{
"user" : "github",
"id" : "3",
"link" : "github.com"
},
]
[
{
"user" : "github",
"id" : "3",
"link" : "github.com"
},
{
"user" : "zenn",
"id" : "4",
"link" : "zenn.dev"
}
]
는 이런 내용을 간단하게 요약한다jq -s add
.$ jq -s add tmp.json tmp2.json
[
{
"user": "syui",
"id": "1",
"link": "syui.cf"
},
{
"user": "test",
"id": "2",
"link": "example.com"
},
{
"user": "github",
"id": "3",
"link": "github.com"
},
{
"user": "github",
"id": "3",
"link": "github.com"
},
{
"user": "zenn",
"id": "4",
"link": "zenn.dev"
}
]
중복 키가 있는 파일을 병합할 때
이것은 둘이 같은 키를 가지고 있을 때만 유효하다.다음 두 파일
user:syui
이 중복됩니다.따라서 단순하게
add
하면 둘 다 남는다.나는 이것을 하나의 장면으로 통합시키고 싶다.
jq -s '.[0] * .[1]' tmp.json tmp2.json
{
"var": {
"aaa": {
"user": "syui",
"id": "1",
"link": "syui.cf"
},
"bbb": {
"user": "test",
"id": "2",
"link": "example.com"
}
}
}
{
"var": {
"aaa": {
"user": "syui",
"id": "1",
"link": "syui.cf"
},
"ccc": {
"user": "github",
"id": "3",
"link": "github.com"
}
}
}
$ jq -s '.[0] * .[1]' tmp.json tmp2.json
{
"var": {
"aaa": {
"user": "syui",
"id": "1",
"link": "syui.cf"
},
"bbb": {
"user": "test",
"id": "2",
"link": "example.com"
},
"ccc": {
"user": "github",
"id": "3",
"link": "github.com"
}
}
}
여러 키 검색 시
jq ".[]|.user,.id"
$ cat tmp.json|jq ".[]|.user,.id"
"syui"
"1"
"test"
"2"
"github"
"3"
배열 번호로 배열을 추출할 때
jq ".[1]"
$ cat tmp.json|jq "keys|.[]"
0
1
2
$ cat tmp.json|jq ".[1]"
{
"user": "test",
"id": "2",
"link": "example.com"
}
또 0
부터 시작했기 때문에 최초의 배열을 꺼내려면.[0]
으로 한다.키만 꺼낸 경우.
jq ".[]|keys"
$ cat tmp.json|jq ".[]|keys|.[]"
"id"
"link"
"user"
"id"
"link"
"user"
"id"
"link"
"user"
Reference
이 문제에 관하여(jq의 사용 방법 총결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/syui/articles/command-json-jq텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)