반응형
GoJq - 순수 Go 코드로 구현한 jq를 소개합니다.
깃허브에서는 아래와 같이 소개하고 있군요..
This is an implementation of jq command written in Go language. You can also embed gojq as a library to your Go products.
한마디로, GoJq는 순수 Go 코드로 구현한 jq 라고 머릿속에 넣어두시면 될것 같습니다.
설치는 아래와 같고요..
Installation
Homebrew
brew install gojq
Zero Install
0install add gojq https://apps.0install.net/utils/gojq.xml
Build from source
go install github.com/itchyny/gojq/cmd/gojq@latest
Docker
docker run -i --rm itchyny/gojq
docker run -i --rm ghcr.io/itchyny/gojq
사용방법은 아래와 같습니다.
Usage
$ echo '{"foo": 128}' | gojq '.foo'
128
$ echo '{"a": {"b": 42}}' | gojq '.a.b'
42
$ echo '{"id": "sample", "10": {"b": 42}}' | gojq '{(.id): .["10"].b}'
{
"sample": 42
}
$ echo '[{"id":1},{"id":2},{"id":3}]' | gojq '.[] | .id'
1
2
3
$ echo '{"a":1,"b":2}' | gojq '.a += 1 | .b *= 2'
{
"a": 2,
"b": 4
}
$ echo '{"a":1} [2] 3' | gojq '. as {$a} ?// [$a] ?// $a | $a'
1
2
3
$ echo '{"foo": 4722366482869645213696}' | gojq .foo
4722366482869645213696 # keeps the precision of large numbers
$ gojq -n 'def fact($n): if $n < 1 then 1 else $n * fact($n - 1) end; fact(50)'
30414093201713378043612608166064768844377641568960512000000000000 # arbitrary-precision integer calculation
Nice error messages.
$ echo '[1,2,3]' | gojq '.foo & .bar'
gojq: invalid query: .foo & .bar
.foo & .bar
^ unexpected token "&"
$ echo '{"foo": { bar: [] } }' | gojq '.'
gojq: invalid json: <stdin>
{"foo": { bar: [] } }
^ invalid character 'b' looking for beginning of object key string
추가적으로 예제코드는 아래와 같습니다.
Usage as a library
You can use the gojq parser and interpreter from your Go products.
package main
import (
"fmt"
"log"
"github.com/itchyny/gojq"
)
func main() {
query, err := gojq.Parse(".foo | ..")
if err != nil {
log.Fatalln(err)
}
input := map[string]interface{}{"foo": []interface{}{1, 2, 3}}
iter := query.Run(input) // or query.RunWithContext
for {
v, ok := iter.Next()
if !ok {
break
}
if err, ok := v.(error); ok {
log.Fatalln(err)
}
fmt.Printf("%#v\n", v)
}
}
그리고, GoJq관련 특징을 간략하게 정리해보자면 아래와 같습니다.
- 'sed for JSON' 이라 불리는 jq를 대부분 호환하는 Go 기반 구현체
- 라이브러리 형태로 자신의 Go 코드에 임베드하여 이용 가능
- jq의 일부 버그를 수정하고, YAML 입출력 기능을 추가
좀 더 자세한 사항은 아래 깃허브에 방문해 보시길 추천드립니다.
오늘의 블로그는 여기까지고요..
항상믿고 봐주셔서 감사합니다.
300x250