영어프랑스어스페인어

Ad


온웍스 파비콘

jq - 클라우드에서의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 공급자에서 jq 실행

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 jq 명령입니다.

프로그램:

이름


jq - 명령줄 JSON 프로세서

개요


jq [옵션...] 필터링 [파일...]

jq 선택, 반복, 축소 등 다양한 방식으로 JSON을 변환할 수 있습니다.
JSON 문서 맹글링. 예를 들어 명령 실행 jq ´지도(.가격) | 추가하다 의지
JSON 개체의 배열을 입력으로 사용하고 "가격" 필드의 합계를 반환합니다.

jq 텍스트 입력도 허용하지만 기본적으로 jq JSON 엔터티의 스트림을 읽습니다.
(숫자 및 기타 리터럴 포함) from 표준. 공백은 구분할 때만 필요합니다.
1과 2, true와 false와 같은 엔터티. 하나 이상 파일 지정할 수 있습니다.
케이스 jq 대신 이들로부터 입력을 읽습니다.

XNUMXD덴탈의 옵션 에 설명되어 있습니다. 불러내기 JQ 부분; 그들은 주로 입력 및 출력에 관한 것입니다.
서식. 그만큼 필터링 jq 언어로 작성되었으며 변환 방법을 지정합니다.
입력 파일 또는 문서.

필터


jq 프로그램은 "필터"입니다. 입력을 받아 출력을 생성합니다. 많이있다
개체의 특정 필드를 추출하거나 숫자를
문자열 또는 기타 다양한 표준 작업.

필터는 다양한 방법으로 결합될 수 있습니다. 하나의 필터 출력을 다음으로 파이프할 수 있습니다.
다른 필터를 사용하거나 필터의 출력을 배열로 수집합니다.

일부 필터는 여러 결과를 생성합니다. 예를 들어 모든 필터를 생성하는 필터가 있습니다.
입력 배열의 요소. 해당 필터를 두 번째로 파이핑하면 두 번째 필터가 실행됩니다.
배열의 각 요소. 일반적으로 루프와 반복으로 수행되는 작업
다른 언어에서는 jq에서 필터를 함께 붙이면 됩니다.

모든 필터에는 입력과 출력이 있다는 것을 기억하는 것이 중요합니다. 짝수 리터럴
"hello" 또는 42와 같은 필터는 입력을 받지만 항상 다음과 같은 리터럴을 생성합니다.
산출. 추가와 같이 두 개의 필터를 결합하는 작업은 일반적으로 동일한 입력을 제공합니다.
결과를 결합합니다. 따라서 평균화 필터를 다음과 같이 구현할 수 있습니다. 더하다 / 길이
- 입력 배열을 둘 다에 공급 더하다 필터와 길이 필터링 후 수행
부서.

그러나 그것은 우리보다 앞서 가고 있습니다. :) 더 간단한 것부터 시작하겠습니다.

불러내기 JQ


jq 필터는 JSON 데이터 스트림에서 실행됩니다. jq에 대한 입력은 다음의 시퀀스로 구문 분석됩니다.
한 번에 하나씩 제공된 필터를 통과하는 공백으로 구분된 JSON 값
시간. 필터의 출력은 다시 표준 출력으로 기록됩니다.
공백으로 구분된 JSON 데이터.

참고: 쉘의 인용 규칙을 염두에 두는 것이 중요합니다. 일반적으로 가장 좋은 방법은
항상 (작은따옴표 문자로) jq 프로그램을 인용합니다.
jq에 대한 특별한 의미는 쉘 메타 문자이기도 합니다. 예를 들어, jq "foo" 실패할 것이다
대부분의 Unix 쉘은 다음과 같기 때문입니다. jq , 일반적으로 실패합니다
때문에 is 지원 한정된. Windows 명령 셸(cmd.exe)을 사용할 때
명령줄에 주어진 경우 jq 프로그램 주위에 큰따옴표를 사용하십시오(대신 -f
프로그램 파일 옵션), 그러나 jq 프로그램의 큰따옴표에는 백슬래시 이스케이프가 필요합니다.

일부 명령줄을 사용하여 jq가 입력 및 출력을 읽고 쓰는 방법에 영향을 줄 수 있습니다.
옵션 :

· --번역:

jq 버전을 출력하고 XNUMX으로 종료합니다.

· --seq:

사용 애플리케이션/json-seq jq의 입력에서 JSON 텍스트를 분리하기 위한 MIME 유형 스키마
및 출력. 이는 ASCII RS(레코드 구분 기호) 문자가 앞에 인쇄됨을 의미합니다.
출력의 각 값과 ASCII LF(줄 바꿈)는 모든 출력 후에 인쇄됩니다. 입력
구문 분석에 실패한 JSON 텍스트는 무시되지만(경고) 모든 항목이 삭제됩니다.
다음 RS까지 후속 입력. 이것은 또한 jq의 출력을 구문 분석합니다.
--seq 옵션을 선택합니다.

· --개울:

스트리밍 방식으로 입력을 구문 분석하여 경로 및 리프 값의 배열을 출력합니다.
(스칼라 및 빈 배열 또는 빈 개체). 예를 들어, "ㅏ" 된다 [[],"ㅏ"]
[[],"a",["b"]] 된다 [[0],[]], [[1],"아"][[1,0],"비"].

이는 매우 큰 입력을 처리하는 데 유용합니다. 이것을 함께 사용하십시오
필터링 및 감소각각 큰 입력을 점진적으로 줄이는 구문.

· --후루룩/-s:

입력의 각 JSON 개체에 대해 필터를 실행하는 대신 전체 입력을 읽습니다.
큰 배열로 스트리밍하고 필터를 한 번만 실행합니다.

· --raw 입력/-R:

입력을 JSON으로 구문 분석하지 마십시오. 대신 각 텍스트 줄은 필터에
끈. 와 결합하면 --후루룩, 전체 입력이 필터에 전달됩니다.
하나의 긴 문자열.

· --null 입력/-n:

어떤 입력도 전혀 읽지 마십시오! 대신 필터는 다음을 사용하여 한 번 실행됩니다. null로 입력으로.
이는 jq를 간단한 계산기로 사용하거나 다음에서 JSON 데이터를 구성할 때 유용합니다.
할퀴다.

· --compact-출력 / -c:

기본적으로 jq는 JSON 출력을 예쁘게 인쇄합니다. 이 옵션을 사용하면 더 많은
대신 각 JSON 개체를 한 줄에 배치하여 출력을 압축합니다.

· --탭:

두 개의 공백 대신 각 들여쓰기 수준에 대해 탭을 사용합니다.

· --톱니 모양 n:

들여쓰기에는 지정된 수의 공백(8개 이하)을 사용하십시오.

· --색상 출력 / -C--단색-출력 / -M:

기본적으로 jq는 터미널에 쓰는 경우 컬러 JSON을 출력합니다. 강제로 하시면 됩니다
다음을 사용하여 파이프나 파일에 쓰는 경우에도 색상 생성 -C, 다음을 사용하여 색상을 비활성화합니다. -M.

· --ascii 출력 / -a:

jq는 입력이 지정된 경우에도 일반적으로 ASCII가 아닌 유니코드 코드 포인트를 UTF-8로 출력합니다.
이스케이프 시퀀스(예: "\u03bc")로 사용합니다. 이 옵션을 사용하면 jq를 강제로
ASCII가 아닌 모든 문자를 동등한 문자로 대체하여 순수한 ASCII 출력을 생성합니다.
탈출 시퀀스.

· --완충되지 않은

각 JSON 개체가 인쇄된 후 출력을 플러시합니다(느린
데이터 소스를 jq로, jq의 출력을 다른 곳으로 파이핑).

· --정렬 키 / -S:

키가 있는 각 객체의 필드를 정렬된 순서로 출력합니다.

· --raw-출력 / -r:

이 옵션을 사용하면 필터의 결과가 문자열이면 직접 작성됩니다.
따옴표가 있는 JSON 문자열로 형식화되지 않고 표준 출력으로 변환됩니다. 이것은 할 수 있습니다
jq 필터가 비 JSON 기반 시스템과 통신하도록 만드는 데 유용합니다.

· --조인 출력 / -j:

처럼 -r 그러나 jq는 각 출력 후에 줄 바꿈을 인쇄하지 않습니다.

· -f 파일 이름 / --파일에서 파일 이름:

awk의 -f 옵션과 같이 명령줄이 아닌 파일에서 필터를 읽습니다. 너
´#´을 사용하여 주석을 달 수도 있습니다.

· -L디렉토리 / -L 예배 규칙서:

앞에 추가 예배 규칙서 모듈 검색 목록에. 이 옵션을 사용하면 아니요
내장 검색 목록이 사용됩니다. 아래 모듈 섹션을 참조하십시오.

· -e / --종료 상태:

마지막 출력 값이 둘 다 아닌 경우 jq의 종료 상태를 0으로 설정합니다. 그릇된 ...도 아니다 null로,
마지막 출력 값이 다음 중 하나인 경우 1 그릇된 or null로, 또는 유효한 결과가 없는 경우 4
생산. 일반적으로 jq는 사용 문제나 시스템 오류가 있는 경우 2, 3으로 종료됩니다.
jq 프로그램 컴파일 오류가 있는 경우 또는 jq 프로그램이 실행된 경우 0입니다.

· --arg name 가치:

이 옵션은 미리 정의된 변수로 jq 프로그램에 값을 전달합니다. jq를 실행하면
--arg 다음, $foo 프로그램에서 사용할 수 있으며 값이 있습니다. "술집".
참고 가치 문자열로 취급되므로 --arg 123 묶을 것이다 $foo"123".

· --argjson name JSON 텍스트:

이 옵션은 JSON 인코딩 값을 미리 정의된 변수로 jq 프로그램에 전달합니다. 만약에
당신은 jq를 실행 --argjson 123다음, $foo 프로그램에서 사용할 수 있으며
가치 123.

· --슬러프파일 변수 이름 파일 이름:

이 옵션은 명명된 파일의 모든 JSON 텍스트를 읽고 배열을 바인딩합니다.
JSON 값을 지정된 전역 변수로 구문 분석했습니다. 다음과 함께 jq를 실행하면 --argfile ,
그때 $foo 프로그램에서 사용할 수 있으며 요소가 다음에 해당하는 배열이 있습니다.
이름이 지정된 파일의 텍스트 .

· --argfile 변수 이름 파일 이름:

사용하지 마세요. 사용 --슬러프파일 대신.

(이 옵션은 --슬러프파일, 하지만 파일에 텍스트가 하나만 있는 경우
그렇지 않으면 텍스트 배열이 다음과 같이 사용됩니다. --슬러프파일.)

· --실행 테스트 [파일 이름]:

주어진 파일 또는 표준 입력에서 테스트를 실행합니다. 이것이 주어진 마지막 옵션이어야 합니다.
모든 이전 옵션을 존중하지 않습니다. 입력은 빈 주석 행으로 구성됩니다.
라인, 프로그램 라인 다음에 하나의 입력 라인, 출력 라인 수만큼
예상(출력당 하나) 및 종료 빈 줄입니다. 컴파일 실패 테스트
"%%FAIL"만 포함된 줄로 시작한 다음 실행할 프로그램이 포함된 줄
컴파일한 다음 실제와 비교할 오류 메시지가 포함된 줄입니다.

이 옵션은 이전 버전과 호환되지 않게 변경될 수 있습니다.

BASIC 필터


.
가장 단순하고 가장 흥미롭지 않은 필터는 다음과 같습니다. .. 가져오는 필터입니다.
입력하고 변경하지 않고 출력으로 생성합니다.

기본적으로 jq는 모든 출력을 예쁘게 인쇄하므로 이 간단한 프로그램은 다음과 같은 유용한 방법이 될 수 있습니다.
예를 들어 JSON 출력 형식 지정 .

jq '.'
"안녕, 세계!"
=> "안녕하세요!"

.foo, .foo.bar
가장 간단한 유용 필터는 .foo. JSON 개체(일명 사전 또는 해시)가 다음과 같이 제공될 때
입력하면 "foo" 키에서 값을 생성하거나 존재하지 않으면 null을 생성합니다.

키에 특수 문자가 포함된 경우 다음과 같이 큰따옴표로 키를 묶어야 합니다.
이: ."푸$".

형식의 필터 .foo.bar 에 해당하는 .foo|.bar.

jq '.foo'
{"foo": 42, "bar": "덜 흥미로운 데이터"}
=> 42

jq '.foo'
{"notfoo": 참, "alsonotfoo": 거짓}
=> null

jq ´.["푸"]´
{"푸": 42}
=> 42

.foo?
처럼 .foo, 그러나 오류가 발생하더라도 출력하지 않습니다. . 배열이나 객체가 아닙니다.

jq '.foo?'
{"foo": 42, "bar": "덜 흥미로운 데이터"}
=> 42

jq '.foo?'
{"notfoo": 참, "alsonotfoo": 거짓}
=> null

jq ´.["푸"]?´
{"푸": 42}
=> 42

jq '[.foo?]'
[1,2]
=> []

.[ ], .[2], .[10:15]
다음과 같은 구문을 사용하여 객체의 필드를 조회할 수도 있습니다. .["푸"] (위의 .foo는
이것의 약식 버전). 키가 정수인 경우 배열에도 적용됩니다.
배열은 XNUMX부터 시작하므로(javascript와 유사) . [2] 배열의 세 번째 요소를 반환합니다.

XNUMXD덴탈의 .[10:15] 구문은 배열의 하위 배열 또는 문자열의 하위 문자열을 반환하는 데 사용할 수 있습니다.
반환된 배열 .[10:15] 인덱스 5의 요소를 포함하는 길이는 10입니다.
(포함) 인덱스 15(제외). 두 인덱스 중 하나가 음수일 수 있습니다(이 경우
배열의 끝에서 거꾸로) 또는 생략(이 경우 시작 또는
배열의 끝).

XNUMXD덴탈의 . [2] 구문을 사용하여 지정된 인덱스에 있는 요소를 반환할 수 있습니다. 음수 지수는
허용됩니다. -1은 마지막 요소를 나타내고 -2는 마지막 요소에서 다음을 나타냅니다.
등등.

XNUMXD덴탈의 .foo 구문은 단순히 키, 즉 모두 영숫자 문자인 키에 대해서만 작동합니다.
.[ ] 콜론 및 점과 같은 특수 문자가 포함된 키와 함께 작동합니다. 을 위한
.["foo::바"].["푸.바"] 동안 일하다 .foo::바.foo.bar 하지 않을 것입니다.

XNUMXD덴탈의 ? "연산자"는 다음과 같이 슬라이스 연산자와 함께 사용할 수도 있습니다. .[10:15]?, 출력
입력이 슬라이스 가능한 값.

jq ``.[0]'
[{"이름":"JSON", "좋음":true}, {"이름":"XML", "좋음":false}]
=> {"이름":"JSON", "좋음":참}

jq ``.[2]'
[{"이름":"JSON", "좋음":true}, {"이름":"XML", "좋음":false}]
=> null

jq ``.[2:4]'
["에이 비 씨 디이"]
=> ["씨", "디"]

jq ``.[2:4]'
"abcdefghi"
=> "시디"

jq ``.[:3]'
["에이 비 씨 디이"]
=> ["a", "b", "c"]

jq ``.[-2:]'
["에이 비 씨 디이"]
=> ["디", "에"]

jq ``.[-2]'
[1,2,3]
=> 2

.[]
당신이 사용하는 경우 .[색인] 구문이지만 인덱스를 완전히 생략하면 반환됩니다. 모든
배열의 요소. 달리기 .[] 입력으로 [1,2,3] 숫자를 XNUMX으로 생성합니다.
단일 배열이 아닌 별도의 결과.

객체에서 이것을 사용할 수도 있으며 객체의 모든 값을 반환합니다.

jq ``.[]'
[{"이름":"JSON", "좋음":true}, {"이름":"XML", "좋음":false}]
=> {"이름":"JSON", "좋음":true}, {"이름":"XML", "좋음":false}

jq ``.[]'
[]
=>

jq ``.[]'
{"a": 1, "b": 1}
=> 1, 1

.[]?
처럼 .[]이지만 오류가 출력되지 않습니다. 배열이나 객체가 아닙니다.

,
두 개의 필터가 쉼표로 구분되면 입력이 두 필터 모두에 공급되고
다중 출력이 됩니다. 첫째, 왼쪽 표현식에서 생성된 모든 출력, 그리고
그런 다음 오른쪽에 의해 생성된 모든 출력. 예를 들어, 필터 .foo, .카페, 생산
"foo" 필드와 "bar" 필드 모두 별도의 출력으로 사용됩니다.

jq '.foo, .bar'
{"foo": 42, "bar": "다른 것", "baz": true}
=> 42, "다른 것"

jq '.사용자, .프로젝트[]'
{"사용자":"stedolan", "프로젝트": ["jq", "wikiflow"]}
=> "스테도란", "jq", "위키플로우"

jq ``.[4,2]'
["에이 비 씨 디이"]
=> "에", "씨"

|
| 연산자는 왼쪽 필터의 출력을 입력하여 두 필터를 결합합니다.
오른쪽에 있는 것의 입력. Unix 쉘의 파이프와 거의 같습니다.
당신은 그것에 익숙합니다.

왼쪽에 있는 것이 여러 결과를 생성하는 경우 오른쪽에 있는 것이 다음에 대해 실행됩니다.
그 결과 각각. 그래서, 표현 .[] | .foo 각각의 "foo" 필드를 검색합니다.
입력 배열의 요소.

jq ´.[] | .이름
[{"이름":"JSON", "좋음":true}, {"이름":"XML", "좋음":false}]
=> "JSON", "XML"

타입 Values


jq는 JSON과 동일한 데이터 유형 세트(숫자, 문자열, 부울, 배열,
객체(JSON에서는 문자열 키만 있는 해시임) 및 "null".

부울, null, 문자열 및 숫자는 자바스크립트와 같은 방식으로 작성됩니다. 처럼
jq의 다른 모든 것, 이 간단한 값은 입력을 받아 출력을 생성합니다. 42 하는
입력을 받아 무시하고 대신 42를 반환하는 유효한 jq 표현식입니다.

배열 구조 - []
JSON에서와 같이 [] 다음과 같이 배열을 구성하는 데 사용됩니다. [1,2,3]. 배열의 요소는
임의의 jq 표현식이어야 합니다. 모든 표현식에서 생성된 모든 결과가 수집됩니다.
하나의 큰 배열로. 이를 사용하여 알려진 양의 값으로 배열을 구성할 수 있습니다.
(에서와 같이 [.foo, .술집, .baz]) 또는 필터의 모든 결과를 배열로 "수집"(예:
in [.항목[].이름])

"," 연산자를 이해하면 jq의 배열 구문을 다른 방식으로 볼 수 있습니다.
빛: 표현 [1,2,3] 쉼표로 구분된 배열에 기본 제공 구문을 사용하지 않습니다.
대신 [] 연산자(결과 수집)를 표현식 1,2,3(
세 가지 다른 결과를 생성합니다).

필터가 있으면 X XNUMX개의 결과를 생성한 다음 표현식 [X] 생산할 것입니다
단일 결과, XNUMX개 요소의 배열.

jq ´[.사용자, .프로젝트[]]´
{"사용자":"stedolan", "프로젝트": ["jq", "wikiflow"]}
=> ["스테도란", "jq", "위키플로우"]

사물 - {}
JSON처럼, {} 다음과 같이 객체(일명 사전 또는 해시)를 구성하기 위한 것입니다. {"ㅏ": 42,
"비": 17/XNUMX/XNUMX}.

키가 "분별"(모든 알파벳 문자)인 경우 따옴표를 생략할 수 있습니다.
값은 모든 표현식이 될 수 있습니다.
복잡한 것), {} 표현식의 입력에 적용됩니다(기억하세요, 모든 필터
입력과 출력이 있습니다).

{푸: .bar}

JSON 개체를 생성합니다 {"푸": 42/XNUMX/XNUMX} JSON 객체가 주어진 경우 {"바":42, "바즈":43}.
이를 사용하여 객체의 특정 필드를 선택할 수 있습니다.
"user", "title", "id" 및 "content" 필드를 입력하고 "user" 및 "title"만 원하면 다음을 수행할 수 있습니다.
쓰다

{사용자: .user, 제목: .title}

이것이 매우 일반적이기 때문에 바로 가기 구문이 있습니다. {사용자, 제목}.

식 중 하나가 여러 결과를 생성하는 경우 여러 사전이
생산. 입력이

{"user":"stedolan","titles":["JQ Primer", "더 많은 JQ"]}

그런 다음 표현

{사용자, 제목: .titles[]}

두 가지 출력을 생성합니다.

{"사용자":"stedolan", "제목": "JQ Primer"}
{"사용자":"stedolan", "제목": "더 많은 JQ"}

키 주위에 괄호를 두는 것은 키가 표현식으로 평가됨을 의미합니다. 와 더불어
위와 같은 입력,

{(.사용자): .제목}

생산하다

{"stedolan": ["JQ 입문서", "추가 JQ"]}

jq ´{사용자, 제목: .titles[]}´
{"user":"stedolan","titles":["JQ Primer", "더 많은 JQ"]}
=> {"사용자":"stedolan", "제목": "JQ Primer"}, {"사용자":"stedolan", "제목": "더 많은 JQ"}

jq ´{(.사용자): .제목}´
{"user":"stedolan","titles":["JQ Primer", "더 많은 JQ"]}
=> {"stedolan": ["JQ 입문서", "추가 JQ"]}

내장 운영자 기능


일부 jq 연산자(예: +) 유형에 따라 다른 작업을 수행합니다.
인수(배열, 숫자 등). 그러나 jq는 암시적 유형 변환을 수행하지 않습니다. 만약에
개체에 문자열을 추가하려고 하면 오류 메시지가 표시되고 결과가 표시되지 않습니다.

추가 - +
운영자 + 두 개의 필터를 가져와 동일한 입력에 모두 적용하고 다음을 추가합니다.
함께 결과. "추가"의 의미는 관련된 유형에 따라 다릅니다.

· 넘버들 일반 산술에 의해 추가됩니다.

· 배열 더 큰 배열로 연결되어 추가됩니다.

· 문자열 더 큰 문자열로 결합되어 추가됩니다.

· 사물 병합, 즉 양쪽에서 모든 키-값 쌍을 삽입하여 추가됩니다.
개체를 하나의 결합된 개체로 변환합니다. 두 객체가 동일한 값을 포함하는 경우
키, 오른쪽에 있는 개체 + 이깁니다. (재귀 병합의 경우 * 운영자.)

null로 모든 값에 추가할 수 있으며 변경되지 않은 다른 값을 반환합니다.

jq '.a + 1'
{"가": 7}
=> 8

jq '.a + .b'
{"a": [1,2], "b": [3,4]}
=> [1,2,3,4]

jq '.a + null'
{"가": 1}
=> 1

jq '.a + 1'
{}
=> 1

jq ``{a: 1} + {b: 2} + {c: 3} + {a: 42}'
null로
=> {"a": 42, "b": 2, "c": 3}

뺄셈 - -
숫자에 대한 일반적인 산술 뺄셈뿐만 아니라 - 연산자는 배열에서 사용할 수 있습니다.
첫 번째 배열에서 두 번째 배열 요소의 모든 항목을 제거합니다.

jq '4 - .a'
{"a":3}
=> 1

jq'. - ["xml", "yaml"]´
["xml", "yaml", "json"]
=> ["json"]

곱셈, 분할, 모듈 - *, /, %
이러한 중위 연산자는 두 개의 숫자가 주어질 때 예상대로 작동합니다. 제로 레이즈로 나누기
오류. x % y x 모듈로 y를 계산합니다.

문자열에 숫자를 곱하면 해당 문자열의 연결이 생성됩니다.
시간. "엑스" * 0 생산하다 null로.

문자열을 다른 문자열로 나누면 두 번째 문자열을 구분 기호로 사용하여 첫 번째 문자열이 분할됩니다.

두 개체를 곱하면 재귀적으로 병합됩니다. 이것은 덧셈처럼 작동하지만 둘 다
개체는 동일한 키에 대한 값을 포함하고 값은 개체이며 두 개는 병합됩니다.
같은 전략으로.

jq'10 / . * 삼
5
=> 6

jq'. / ", "´
"에이 비 씨 디이"
=> ["a","b,c,d","e"]

jq ´{"k": {"a": 1, "b": 2}} * {"k": {"a": 0,"c": 3}}´
null로
=> {"k": {"a": 0, "b": 2, "c": 3}}

jq ´.[] | (1
[1,0,-1]
=> 1, -1

길이
내장 함수 길이 다양한 유형의 값 길이를 가져옵니다.

· 길이 포함된 유니코드 코드포인트의 수입니다(이는
순수한 ASCII인 경우 JSON 인코딩 길이(바이트)와 동일).

· 길이 정렬 요소의 수입니다.

· 길이 대상 키-값 쌍의 수입니다.

· 길이 null로 XNUMX입니다.

jq ´.[] | 길이´ [[1,2], "문자열", {"a":2}, null] => 2, 6, 1, 0

열쇠, 키_정렬되지 않음
내장 함수 , 객체가 주어지면 키를 배열로 반환합니다.

키는 유니코드 코드 포인트 순서에 따라 "알파벳순"으로 정렬됩니다. 이것은 주문이 아닙니다.
특정 언어에서 특히 의미가 있지만
로캘 설정에 관계없이 동일한 키 집합을 가진 두 개체에 대해 동일합니다.

인셀덤 공식 판매점인 배열이 주어지면 해당 배열에 대한 유효한 인덱스를 반환합니다.
0에서 길이-1까지.

XNUMXD덴탈의 키_정렬되지 않음 기능은 같습니다 , 그러나 입력이 객체이면 키는
정렬되지 않고 대신 키가 대략 삽입 순서대로 정렬됩니다.

jq '키'
{"abc": 1, "abcd": 2, "푸": 3}
=> ["푸", "abc", "abcd"]

jq '키'
[42,3,35]
=> [0,1,2]

(키)
내장 함수 입력 객체에 주어진 키가 있는지 또는 입력이 있는지 반환합니다.
배열은 주어진 인덱스에 요소를 가집니다.

있다($키) 여부를 확인하는 것과 동일한 효과가 있습니다. $키 반환된 배열의 멤버입니다.
by 비록 더 빨라질 것입니다.

jq ´map(has("foo"))´
[{"푸": 42}, {}]
=> [참, 거짓]

jq '맵((2))'
[[0,1], ["a","b","c"]]
=> [거짓, 참]

in
내장 함수 in 입력 키가 주어진 객체에 있거나 입력 색인을 반환합니다.
주어진 배열의 요소에 해당합니다. 본질적으로 의 역 버전입니다.
.

jq ´.[] | in({"푸": 42})´
["푸", "바"]
=> 참, 거짓

jq '맵(in([0,1]))'
[2, 0]
=> [거짓, 참]

경로(path_expression)
주어진 경로 표현식의 배열 표현을 .. 출력은 다음의 배열입니다.
문자열(개체0의 키 및/또는 숫자(배열 인덱스.

경로 표현식은 다음과 같은 jq 표현식입니다. .a뿐만 아니라, .[]. 경로에는 두 가지 유형이 있습니다.
표현식: 정확히 일치할 수 있는 것과 그렇지 않은 것. 예를 들어, .알파벳 는 Teledyne LeCroy 오실로스코프 및 LSA-XNUMX 시리즈 임베디드 신호 분석기가
정확히 일치하는 경로 표현식 .a[].b 아니다.

경로(exact_path_expression) 경로 표현식의 배열 표현을 생성합니다.
에 존재하지 않더라도 .만약 . is null로 또는 배열이나 객체.

경로(패턴) 일치하는 경로의 배열 표현을 생성합니다. 무늬 경우
경로가 존재 ..

경로 표현식은 일반 표현식과 다르지 않습니다. 표현식
경로(..|선택(유형=="부울")) 에서 부울 값에 대한 모든 경로를 출력합니다. ., 그리고 만
그 길들.

jq '경로(.a[0].b)'
null로
=> ["가",0,"비"]

jq ´[경로(..)]´
{"a":[{"b":1}]}
=> [[],["a"],["a",0],["a",0,"b"]]

del(경로_식)
내장 함수 개체에서 키와 해당 값을 제거합니다.

jq '델(.푸)'
{"푸": 42, "바": 9001, "바즈": 42}
=> {"바": 9001, "바즈": 42}

jq '델(.[1, 2])'
["푸", "바", "바즈"]
=> ["푸"]

to_entries, from_entries, with_entries
이러한 함수는 객체와 키-값 쌍의 배열 사이를 변환합니다. 만약에 to_entries
개체를 전달한 다음 각각에 대해 k: v 입력 항목, 출력 배열에는 다음이 포함됩니다.
{"열쇠": k, "값": v}.

from_entries 반대 변환을 수행하고 with_entries(푸) 에 대한 속기
to_entries | 지도(foo) | from_entries, 모든 키에 대해 일부 작업을 수행하는 데 유용하며
객체의 값. from_entries 키, 키, 이름, 값 및 값을 키로 허용합니다.

jq 'to_entries'
{"a": 1, "b": 2}
=> [{"키":"a", "값":1}, {"키":"b", "값":2}]

jq 'from_entries'
[{"키":"a", "값":1}, {"키":"b", "값":2}]
=> {"a": 1, "b": 2}

jq ´with_entries(.key |= "KEY_" + .)´
{"a": 1, "b": 2}
=> {"키_a": 1, "키_b": 2}

선택(부울 표현식)
기능 선택(푸) 다음과 같은 경우 변경되지 않은 입력을 생성합니다. 해당 입력에 대해 true를 반환하고
그렇지 않으면 출력을 생성하지 않습니다.

목록 필터링에 유용합니다. [1,2,3] | 지도(선택(. >= 2)) 당신을 줄 것이다 [2,3].

jq '맵(선택(. >= 2))'
[1,5,3,0,7]
=> [5,3,7]

jq ´.[] | select(.id == "초")´
[{"id": "첫 번째", "val": 1}, {"id": "두 번째", "val": 2}]
=> {"id": "두 번째", "val": 2}

배열, 사물, 반복 가능, 부울, 번호, 법선, 유한, 문자열, 널, 값,
스칼라
이러한 빌트인은 배열, 객체, 이터러블(배열 또는
개체), 부울, 숫자, 일반 숫자, 유한 숫자, 문자열, null, non-null
값과 반복 불가능.

jq ´.[]|숫자´
[[],{},1,"foo",null,true,false]
=> 1


결과를 반환하지 않습니다. 전혀. 심지어 null로.

경우에 따라 유용합니다. 필요한지 알 수 있습니다 :)

jq '1, 비어 있음, 2'
null로
=> 1, 2

jq ´[1,2,빈,3]´
null로
=> [1,2,3]

오류(메세지)
다음과 같이 오류가 발생합니다. .a null 이외의 값에 적용되고 개체는 적용되지만
주어진 메시지를 오류 값으로 사용합니다.

$__loc__
파일 이름과 줄 번호와 함께 "파일" 키와 "줄" 키가 있는 개체를 생성합니다.
어디에 $__loc__ 값으로 발생합니다.

jq ´try error("\($__loc__)") catch .´
null로
=> "{\"파일\":\" \",\"줄\":1}"

지도(x), 지도_값(x)
모든 필터 x, 지도(x) 입력 배열의 각 요소에 대해 해당 필터를 실행하고
출력을 새 배열로 생성합니다. 지도(.+1) 배열의 각 요소를 증가시킵니다.
숫자.

마찬가지로, 지도_값(x) 각 요소에 대해 해당 필터를 실행하지만
객체가 전달될 때 객체.

지도(x) 에 해당하는 [.[] | x]. 사실, 이것이 정의되는 방식입니다. 비슷하게,
지도_값(x) 로 정의된다 .[] |= x.

jq '맵(.+1)'
[1,2,3]
=> [2,3,4]

jq '맵_값(.+1)'
{"a": 1, "b": 2, "c": 3}
=> {"a": 2, "b": 3, "c": 4}

경로, 경로(node_filter), 잎 경로
경로 입력의 모든 요소에 대한 경로를 출력합니다(단,
빈 목록, 나타내는 . 그 자체).

경로(f) 어떤 값에 대한 경로를 출력합니다. f 사실이다. 그건, 경로(숫자)
모든 숫자 값에 대한 경로를 출력합니다.

잎 경로 의 별칭입니다. 경로(스칼라); 잎 경로 is 사용되지 않는 에서 제거됩니다.
다음 주요 릴리스.

jq ´[경로]´
[1,[[],{"a":2}]]
=> [[0],[1],[1,0],[1,1],[1,1,"a"]]

jq ´[경로(스칼라)]´
[1,[[],{"a":2}]]
=> [[0],[1,1,"a"]]

더하다
필터 더하다 배열을 입력으로 받아 배열의 요소를 출력으로 생성합니다.
함께 추가되었습니다. 이는 유형에 따라 합산, 연결 또는 병합을 의미할 수 있습니다.
입력 배열의 요소 - 규칙은 + 연산자
(전술 한 바와).

입력이 빈 배열인 경우 더하다 반품 null로.

jq '추가'
["알파벳"]
=> "에이비씨"

jq '추가'
[1, 2, 3]
=> 6

jq '추가'
[]
=> null

어떤, 모든(조건), 임의(제너레이터; 질환)
필터 어떤 부울 값의 배열을 입력으로 받아 다음을 생성합니다. 참된 다음과 같은 경우 출력으로
배열의 모든 요소는 참된.

입력이 빈 배열인 경우 어떤 반품 그릇된.

XNUMXD덴탈의 어떤(조건) 양식은 주어진 조건을 입력 배열의 요소에 적용합니다.

XNUMXD덴탈의 임의(제너레이터; 질환) form은 주어진 조건을 모든 출력에 적용합니다.
주어진 발전기.

jq '아무'
[허위 사실]
=> 사실

jq '아무'
[거짓, 거짓]
=> 거짓

jq '아무'
[]
=> 거짓

모두, 모두(조건), 모두(제너레이터; 질환)
필터 모든 부울 값의 배열을 입력으로 받아 다음을 생성합니다. 참된 다음과 같은 경우 출력으로
배열의 모든 요소는 참된.

XNUMXD덴탈의 모두(조건) 양식은 주어진 조건을 입력 배열의 요소에 적용합니다.

XNUMXD덴탈의 모두(제너레이터; 질환) form은 주어진 조건을 모든 출력에 적용합니다.
주어진 발전기.

입력이 빈 배열인 경우 모든 반품 참된.

jq '모두'
[허위 사실]
=> 거짓

jq '모두'
[진짜 진짜]
=> 사실

jq '모두'
[]
=> 사실

[필요 1.5] 단조롭게 하다, 평탄화(깊이)
필터 반음 낮추다 중첩된 배열의 배열을 입력으로 받아 평면 배열을 생성합니다.
원래 배열 내부의 모든 배열이 해당 값으로 재귀적으로 대체되었습니다.
평면화할 중첩 수준을 지정하기 위해 인수를 전달할 수 있습니다.

반음 낮추다(2) 처럼 반음 낮추다, 하지만 최대 XNUMX단계까지만 진행됩니다.

jq '플랫텐'
[1, [2], [[3]]]
=> [1, 2, 3]

jq'반음 낮추다(1
[1, [2], [[3]]]
=> [1, 2, [3]]

jq '플랫텐'
[[]]
=> []

jq '플랫텐'
[{"푸": "바"}, [{"푸": "바즈"}]]
=> [{"푸": "바"}, {"푸": "바즈"}]

범위(최대), 범위(부터;까지) 범위(부터;까지;까지)
XNUMXD덴탈의 범위 함수는 숫자 범위를 생성합니다. 범위(4;10) 6에서 4개의 숫자를 생성합니다.
(포함) ~ 10(제외). 숫자는 별도의 출력으로 생성됩니다. 사용
[범위(4;10)] 범위를 배열로 얻으려면.

하나의 인수 형식은 0에서 주어진 숫자까지의 숫자를 생성합니다.
1.

두 인수 형식은 다음에서 숫자를 생성합니다. 까지 1씩 증가합니다.

세 개의 인수 형식은 숫자를 생성합니다. 까지 증분으로 by.

jq '범위(2;4)'
null로
=> 2, 3

jq ´[범위(2;4)]´
null로
=> [2,3]

jq '[범위(4)]'
null로
=> [0,1,2,3]

jq ´[범위(0;10;3)]´
null로
=> [0,3,6,9]

jq ´[범위(0;10;-1)]´
null로
=> []

jq ´[범위(0;-5;-1)]´
null로
=> [0,-1,-2,-3,-4]


XNUMXD덴탈의 함수는 숫자 입력의 바닥을 반환합니다.

jq '바닥'
3.14159
=> 3

sqrt
XNUMXD덴탈의 sqrt 함수는 숫자 입력의 제곱근을 반환합니다.

jq 'sqrt'
9
=> 3

숫자로
XNUMXD덴탈의 숫자로 함수는 입력을 숫자로 구문 분석합니다. 올바른 형식으로 변환됩니다
문자열을 해당하는 숫자로 변환하고 숫자는 그대로 두고 다른 모든 문자열에는 오류를 표시합니다.
입력.

jq '.[] | tonumber'
[1, "1"]
=> 1, 1

tostring
XNUMXD덴탈의 tostring 함수는 입력을 문자열로 출력합니다. 문자열은 변경되지 않고 그대로 유지되며 모든
다른 값은 JSON으로 인코딩됩니다.

jq ´.[] | tostring'
[1, "1", [1]]
=> "1", "1", "[1]"

유형
XNUMXD덴탈의 유형 함수는 인수의 유형을 null 중 하나인 문자열로 반환합니다.
부울, 숫자, 문자열, 배열 또는 객체.

jq '맵(유형)'
[0, 거짓, [], {}, null, "안녕하세요"]
=> ["숫자", "부울", "배열", "객체", "널", "문자열"]

무한, 난, 무한대, 이난, 유한, 보통이다
일부 산술 연산은 무한대와 "숫자가 아님"(NaN) 값을 생성할 수 있습니다. 그만큼
무한대 내장 반환 참된 입력이 무한한 경우. 그만큼 이스난 내장 반환 참된
입력이 NaN인 경우. 그만큼 무한의 builtin은 양의 무한 값을 반환합니다. 그만큼 할머니
내장은 NaN을 반환합니다. 그만큼 보통이다 builtin은 입력이 일반 숫자이면 true를 반환합니다.

XNUMX으로 나누면 오류가 발생합니다.

현재 무한대, NaN 및 준정규에서 작동하는 대부분의 산술 연산은
오류를 발생시킵니다.

jq ´.[] | (무한 * .) < 0´
[-열하나]
=> 참, 거짓

jq ´무한, 난 | 유형
null로
=> "숫자", "숫자"

종류, sort_by(경로 표현식)
XNUMXD덴탈의 종류 함수는 배열이어야 하는 입력을 정렬합니다. 값은
다음 순서:

· null로

· 그릇된

· 참된

· 숫자

· 문자열, 알파벳순(유니코드 코드포인트 값 기준)

· 배열, 어휘 순서

· 사물

객체의 순서는 약간 복잡합니다. 먼저 객체를 비교하여 객체를 비교합니다.
키 집합(정렬된 순서의 배열), 키가 같으면 값은 다음과 같습니다.
키별로 비교.

종류 객체의 특정 필드별로 정렬하거나 jq 필터를 적용하여 정렬하는 데 사용할 수 있습니다.

sort_by(푸) 의 결과를 비교하여 두 요소를 비교합니다. 각 요소에.

jq '정렬'
[8,3,널,6]
=> [널,3,6,8]

jq 'sort_by(.foo)'
[{"foo":4, "bar":10}, {"foo":3, "bar":100}, {"foo":2, "bar":1}]
=> [{"푸":2, "바":1}, {"푸":3, "바":100}, {"푸":4, "바":10}]

group_by(경로_식)
group_by(.foo) 배열을 입력으로 받아 동일한 요소를 그룹화합니다. .foo
별도의 배열로 만들고 이러한 모든 배열을 더 큰 배열의 요소로 생성합니다.
의 값으로 정렬 .foo 입력란입니다.

필드 액세스뿐만 아니라 모든 jq 표현식을 대신 사용할 수 있습니다. .foo. 분류
순서는 에서 설명한 것과 동일합니다. 종류 위의 기능.

jq 'group_by(.foo)'
[{"foo":1, "bar":10}, {"foo":3, "bar":100}, {"foo":1, "bar":1}]
=> [[{"foo":1, "bar":10}, {"foo":1, "bar":1}], [{"foo":3, "bar":100}]]

최대, min_by(경로_exp), max_by(경로_exp)
입력 배열의 최소 또는 최대 요소를 찾습니다.

XNUMXD덴탈의 min_by(경로_exp)max_by(경로_exp) 기능을 사용하면 특정
검사할 필드 또는 속성(예: min_by(.foo) 가장 작은 개체를 찾습니다.
입력란입니다.

jq '분'
[5,4,2,7]
=> 2

jq 'max_by(.foo)'
[{"푸":1, "바":14}, {"푸":2, "바":3}]
=> {"푸":2, "바":3}

독특한, unique_by(경로_특급)
XNUMXD덴탈의 유일한 함수는 배열을 입력으로 받아 동일한 요소의 배열을 생성합니다.
중복이 제거된 정렬된 순서입니다.

XNUMXD덴탈의 unique_by(경로_특급) 함수는 얻은 각 값에 대해 하나의 요소만 유지합니다.
인수를 적용합니다. 모든 요소에서 하나의 요소를 취하여 배열을 만드는 것으로 생각하십시오.
제작 그룹 그룹.

jq '고유'
[1,2,5,3,5,3,1,3]
=> [1,2,3,5]

jq 'unique_by(.foo)'
[{"푸": 1, "바": 2}, {"푸": 1, "바": 3}, {"푸": 4, "바": 5}]
=> [{"푸": 1, "바": 2}, {"푸": 4, "바": 5}]

jq 'unique_by(길이)'
["두툼한", "베이컨", "고양이", "매미", "아스파라거스"]
=> ["베이컨", "두툼한", "아스파라거스"]


이 함수는 배열을 뒤집습니다.

jq '리버스'
[1,2,3,4]
=> [4,3,2,1]

포함(요소)
필터 포함(b) b가 입력에 완전히 포함되면 true를 생성합니다. ㅏ
문자열 B는 B가 A의 하위 문자열인 경우 문자열 A에 포함됩니다. 배열 B는 문자열 A에 포함됩니다.
B의 모든 요소가 A의 요소에 포함된 경우 배열 A. 객체 B는
B의 모든 값이 다음과 함께 A의 값에 포함된 경우 객체 A에 포함
같은 키. 다른 모든 유형은 동일한 경우 서로에 포함된 것으로 간주됩니다.

jq '포함("바")´
"푸바"
=> 사실

jq ´contains(["baz", "bar"])´
["푸바", "푸바즈", "블라프"]
=> 사실

jq ´contains(["bazzzzz", "바"])´
["푸바", "푸바즈", "블라프"]
=> 거짓

jq ``contains({foo: 12, bar: [{barp: 12}]})'
{"foo": 12, "bar":[1,2,{"barp":12, "blip":13}]}
=> 사실

jq ``contains({foo: 12, bar: [{barp: 15}]})'
{"foo": 12, "bar":[1,2,{"barp":12, "blip":13}]}
=> 거짓

지수
인덱스를 포함하는 배열을 출력합니다. . 어디에 s 발생합니다. 입력은 배열일 수 있습니다.
어떤 경우 s 가 배열이면 인덱스 출력은 모든 요소가 있는 인덱스 출력이 됩니다. .
일치하는 s.

jq ´인덱스(", ")´
"a,b, cd, efg, hijk"
=> [3,7,12]

jq'색인(1
[0,1,2,1,3,1,4]
=> [1,3,5]

jq '인덱스([1,2])'
[0,1,2,3,1,4,2,5,1,2,6,7]
=> [1,8]

인덱스, 색인
첫 번째(색인) 또는 마지막(린덱스)의 발생 s 입력에서.

jq '인덱스(", ")´
"a,b, cd, efg, hijk"
=> 3

jq ´rindex(", ")´
"a,b, cd, efg, hijk"
=> 12

내부
필터 내부(b) 입력이 b 내에 완전히 포함되면 true를 생성합니다. 그것
본질적으로 의 역 버전입니다. 이 포함되어 있습니다.

jq ´내부("푸바")´
"술집"
=> 사실

jq ´inside(["foobar", "foobaz", "blarp"])´
["바즈", "바"]
=> 사실

jq ´inside(["foobar", "foobaz", "blarp"])´
["bazzzzzz", "바"]
=> 거짓

jq ´inside({"foo": 12, "bar":[1,2,{"barp":12, "blip":13}]})´
{"푸": 12, "바": [{"바프": 12}]}
=> 사실

jq ´inside({"foo": 12, "bar":[1,2,{"barp":12, "blip":13}]})´
{"푸": 12, "바": [{"바프": 15}]}
=> 거짓

시작(str)
출력 참된 만약에 . 주어진 문자열 인수로 시작합니다.

jq ´[.[]|startswith("foo")]´
["fo", "foo", "barfoo", "foobar", "barfoob"]
=> [거짓, 참, 거짓, 참, 거짓]

종료(str)
출력 참된 만약에 . 주어진 문자열 인수로 끝납니다.

jq ´[.[]|endswith("foo")]´
["푸바", "바푸"]
=> [거짓, 참]

조합, 조합(n)
입력 배열에 있는 배열 요소의 모든 조합을 출력합니다. 주어진 경우
논의 n의 모든 조합을 출력합니다. n 입력 배열의 반복.

jq '조합'
[[1,2], [3, 4]]
=> [1, 3], [1, 4], [2, 3], [2, 4]

jq'조합(2
[0, 1]
=> [0, 0], [0, 1], [1, 0], [1, 1]

l트림스트(str)
주어진 접두사 문자열로 시작하는 경우 입력을 제거한 상태로 출력합니다.

jq ´[.[]|ltrimstr("foo")]´
["fo", "foo", "barfoo", "foobar", "afoo"]
=> ["fo","","barfoo","bar","afoo"]

rtrimstr(str)
주어진 접미사 문자열로 끝나면 제거된 입력을 출력합니다.

jq ´[.[]|rtrimstr("foo")]´
["fo", "foo", "barfoo", "foobar", "foob"]
=> ["fo","","bar","foobar","foob"]

폭발
입력 문자열을 문자열의 코드 포인트 숫자 배열로 변환합니다.

jq '폭발'
"푸바"
=> [102,111,111,98,97,114]

함몰하다
폭발의 반대.

jq '내파'
[65, 66, 67]
=> "ABC"

분열
구분자 인수에서 입력 문자열을 분할합니다.

jq ´분할(", ")´
"에이 비 씨 디이, "
=> ["a","b,c,d","e",""]

조인(str)
인수를 구분 기호로 사용하여 입력으로 제공된 요소의 배열을 결합합니다. 그것은
의 역 분열: 즉, 실행 분할("푸") | 조인("푸") 모든 입력 문자열에 대해
해당 입력 문자열을 반환합니다.

jq '조인(", ")´
["에이 비 씨 디이"]
=> "a, b,c,d, e"

ascii_downcase, ascii_upcase
알파벳 문자(az 및 AZ)가 다음으로 변환된 입력 문자열의 복사본을 내보냅니다.
지정된 경우.

동안(조건; 최신 정보)
XNUMXD덴탈의 동안(조건; 최신 정보) 기능을 사용하면 업데이트를 반복적으로 적용할 수 있습니다. . 까지 조건
거짓입니다.

참고 동안(조건; 최신 정보) 재귀 jq 함수로 내부적으로 정의됩니다. 재귀
내에서 호출 동안 다음과 같은 경우 추가 메모리를 소비하지 않습니다. 최신 정보 최대 XNUMX개 생성
각 입력에 대한 출력. 아래의 고급 항목을 참조하십시오.

jq ´[동안(.<100; .*2)]´
1
=> [1,2,4,8,16,32,64]

때까지(조건; 다음)
XNUMXD덴탈의 때까지(조건; 다음) 기능을 사용하면 표현식을 반복적으로 적용할 수 있습니다. 다음 것,
처음에 . 그런 다음 자체 출력으로, 때까지 조건 사실이다. 예를 들어 다음과 같이 사용할 수 있습니다.
계승 기능을 구현합니다(아래 참조).

참고 때까지(조건; 다음) 재귀 jq 함수로 내부적으로 정의됩니다. 재귀
내에서 호출 까지() 다음과 같은 경우 추가 메모리를 소비하지 않습니다. 다음 것 최대 XNUMX개 생성
각 입력에 대한 출력. 아래의 고급 항목을 참조하십시오.

jq ´[.,1]|until(.[0] < 1; [.[0] - 1, .[1] * .[0]])|.[1]´
4
=> 24

재귀(f), 재귀, 재귀(에프; 상태), recurse_down
XNUMXD덴탈의 재귀(에프) 함수를 사용하면 재귀 구조를 검색하고 추출할 수 있습니다.
모든 수준의 흥미로운 데이터. 입력이 파일 시스템을 나타낸다고 가정합니다.

{"이름": "/", "자식": [
{"이름": "/큰 상자", "어린이들": [
{"이름": "/빈/ls", "어린이들": []},
{"이름": "/ 빈 / SH", "어린이들": []}]},
{"이름": "홈 /", "어린이들": [
{"이름": "/home/stephen", "아이들": [
{"이름": "/home/stephen/jq", "어린이": []}]}]}]}

이제 존재하는 모든 파일 이름을 추출하려고 한다고 가정합니다. 당신은 검색해야합니다 .name을,
.어린이[].이름, .children[].children[].이름, 등등. 다음과 같이 할 수 있습니다.

재귀(.children[]) | .이름

인수 없이 호출될 때, 재귀 에 해당하는 재귀(.[]?).

재귀(에프) ~와 동일하다 재귀(에프; . != 없는) 걱정없이 사용할 수 있고
재귀 깊이.

재귀(에프; 질환) 방출로 시작하는 생성기입니다. 그런 다음 차례로 방출
.|f, .|f|f, .|f|f|f, ... 계산된 값이 조건을 만족하는 한. 을 위한
예를 들어, 적어도 원칙적으로 모든 정수를 생성하려면 다음과 같이 작성할 수 있습니다. 재귀(.+1;
진실).

레거시 이유로, recurse_down 호출에 대한 별칭으로 존재 재귀 인수없이.
이 별칭은 사용되지 않는 다음 주요 릴리스에서 제거됩니다.

재귀 호출 재귀 언제든지 추가 메모리를 소비하지 않습니다. f ~에서 생산하다
각 입력에 대한 대부분의 단일 출력.

jq ´재귀(.foo[])´
{"푸":[{"푸": []}, {"푸":[{"푸":[]}]}]}
=> {"foo":[{"foo":[]},{"foo":[{"foo":[]}]}]}, {"foo":[]}, {"foo": [{"푸":[]}]}, {"푸":[]}

jq '재귀'
{"a":0,"b":[1]}
=> {"a":0,"b":[1]}, 0, [1], 1

jq ´재귀(. * .; . < 20)´
2
=> 2, 4, 16

..
에 대한 속기 재귀 인수없이. 이것은 XPath와 유사하도록 의도되었습니다. //
운영자. 참고 ..그리고 작동하지 않습니다. 사용 ..|아 대신에. 아래 예에서 우리는
..|.a? "아래"에서 찾은 개체에서 개체 키 "a"의 모든 값을 찾으려면 ..

jq '..|.a?'
[[{"a":1}]]
=> 1

환경
jq의 환경을 나타내는 객체를 출력합니다.

jq 'env.PAGER'
null로
=> "덜"

바꾸어 놓다
들쭉날쭉한 행렬(배열의 배열)을 바꿉니다. 행은 null로 채워지므로
결과는 항상 직사각형입니다.

jq '전치'
[[1], [2,3]]
=> [[1,2],[널,3]]

b검색(x)
bsearch(x)는 입력 배열에서 x에 대한 이진 검색을 수행합니다. 입력이 정렬되고
x를 포함하면 bsearch(x)는 배열의 인덱스를 반환합니다. 그렇지 않으면 배열이
정렬되면 (-1 - ix)를 반환합니다. 여기서 ix는 배열이
ix에서 x를 삽입한 후에도 여전히 정렬됩니다. 배열이 정렬되지 않은 경우 bsearch(x)
관심이 없는 정수를 반환합니다.

jq'b검색(0
[0,1]
=> 0

jq'b검색(0
[1,2,3]
=> -1

jq'b검색(4) $ix로 | $ix < 0이면 .[-(1+$ix)] = 4 그렇지 않으면 . 끝
[1,2,3]
=> [1,2,3,4]

보간법 - \(푸)
문자열 내에서 백슬래시 뒤에 괄호 안에 표현식을 넣을 수 있습니다. 무엇이든
식 반환은 문자열에 보간됩니다.

jq ´"입력은 \(.)이며 \(.+1)보다 XNUMX이 적습니다"´
42
=> "입력값은 42로, 43보다 XNUMX이 작습니다."

개 심자 누구에게 누구로부터 JSON
XNUMXD덴탈의 tojsonfromjson builtins는 값을 JSON 텍스트로 덤프하거나 JSON 텍스트를 다음으로 구문 분석합니다.
값, 각각. tojson 내장은 tostring이 반환한다는 점에서 tostring과 다릅니다.
문자열은 수정되지 않은 반면 tojson은 문자열을 JSON 문자열로 인코딩합니다.

jq '[.[]|tostring]'
[1, "푸", ["푸"]]
=> ["1","푸","[\"푸\"]"]

jq '[.[]|tojson]'
[1, "푸", ["푸"]]
=> ["1","\"푸\"","[\"푸\"]"]

jq '[.[]|tojson|fromjson]'
[1, "푸", ["푸"]]
=> [1,"푸",["푸"]]

형성 문자열 탈출
XNUMXD덴탈의 @foo 구문은 URL을 구축하는 데 유용한 문자열의 형식을 지정하고 이스케이프하는 데 사용됩니다.
HTML이나 XML 등과 같은 언어로 된 문서. @foo 에 대한 필터로 사용할 수 있습니다.
가능한 이스케이프는 다음과 같습니다.

@텍스트:

통화 tostring, 자세한 내용은 해당 기능을 참조하십시오.

@json:

입력을 JSON으로 직렬화합니다.

@html:

문자를 매핑하여 HTML/XML 이스케이프 적용 <>&'" 그들의 실체에
등가물 <, >, , ', ".

@우리:

예약된 모든 URI 문자를 %더블 엑스 순서.

@csv:

입력은 배열이어야 하며 큰따옴표가 포함된 CSV로 렌더링됩니다.
문자열 및 반복으로 이스케이프된 따옴표.

@tsv:

입력은 배열이어야 하며 TSV(탭으로 구분된 값)로 렌더링됩니다. 각
입력 배열은 한 줄로 인쇄됩니다. 필드는 단일 탭으로 구분됩니다.
(아스키 0 X 09). 입력 문자 줄바꿈(ascii 0x0a), 캐리지 리턴(ASCII
0x0d), 탭(아스키 0 X 09) 및 백슬래시(ascii 0x5c) 이스케이프로 출력됩니다.
시퀀스 \n, \r, \t, \\ 각각.

@쉿:

입력은 POSIX 셸의 명령줄에서 사용하기에 적합하게 이스케이프됩니다. 만약
입력은 배열이고 출력은 공백으로 구분된 일련의 문자열입니다.

@base64:

입력은 RFC 64에 지정된 대로 base4648로 변환됩니다.

이 구문은 유용한 방식으로 문자열 보간과 결합될 수 있습니다. 팔로우할 수 있습니다
@foo 문자열 리터럴이 있는 토큰. 문자열 리터럴의 내용은 지원 탈출하다.
그러나 해당 문자열 리터럴 내에서 수행된 모든 보간은 이스케이프됩니다. 예를 들어,

@uri "https://www.google.com/search?q=\(.search)"

입력에 대해 다음 출력을 생성합니다. {"검색":"무엇 is jq?"}:

"https://www.google.com/search?q=what%20is%20jq%3F"

URL의 슬래시, 물음표 등은 이스케이프되지 않습니다.
문자열 리터럴의.

jq '@html'
"x < y이면 작동합니다."
=> "x < y인 경우 작동합니다."

jq ´@sh "에코 \(.)"´
"오하라의 에일"
=> "에코 ´O´\\´´Hara´\\´´s Ale´"

날짜
jq는 기본 날짜 처리 기능을 일부 상위 수준 및 하위 수준과 함께 제공합니다.
내장. 모든 경우에 이러한 빌트인은 UTC 시간만 독점적으로 처리합니다.

XNUMXD덴탈의 fromdateiso8601 builtin은 ISO 8601 형식의 날짜 시간을 초 단위로 구문 분석합니다.
유닉스 시대(1970-01-01T00:00:00Z) 이후. 그만큼 todateiso8601 builtin은 그 반대입니다.

XNUMXD덴탈의 날짜부터 내장은 datetime 문자열을 구문 분석합니다. 현재 날짜부터 ISO 8601만 지원
그러나 앞으로는 더 많은 날짜 시간 문자열을 구문 분석하려고 시도할 것입니다.
형식.

XNUMXD덴탈의 오늘 내장은 별칭입니다 todateiso8601.

XNUMXD덴탈의 지금 builtin은 Unix 시대 이후의 현재 시간을 초 단위로 출력합니다.

C 라이브러리 시간 함수에 대한 저수준 jq 인터페이스도 제공됩니다. strptime,
strftime, mktime지엠타임. 자세한 내용은 호스트 운영 체제 설명서를 참조하십시오.
사용하는 형식 문자열 strptimestrftime. 참고: 반드시 안정적인 것은 아닙니다.
특히 현지화 기능과 관련하여 jq의 인터페이스.

XNUMXD덴탈의 지엠타임 builtin은 Unix epoch 이후 몇 초를 소비하고 "broken"을 출력합니다.
중단 시간"을 숫자 배열로 나타내는 시간 표현(이 순서대로):
년, 월(XNUMX 기준), 일, 시, 분
시, 분초, 요일, 연도의 일자 -- 모두
달리 명시되지 않는 한 XNUMX 기반.

XNUMXD덴탈의 mktime builtin은 시간 출력의 "분할된 시간" 표현을 사용합니다. 지엠타임
strptime.

XNUMXD덴탈의 문자열 시간(fmt) 빌트인은 다음과 일치하는 입력 문자열을 구문 분석합니다. fmt 논쟁. 출력은
소비된 "분할된 시간" 표현 지엠타임 에 의해 출력 mktime.

XNUMXD덴탈의 strftime(fmt) builtin은 주어진 형식으로 시간을 형식화합니다.

에 대한 형식 문자열 strptimestrftime 일반적인 C 라이브러리에 설명되어 있습니다.
선적 서류 비치. ISO 8601 datetime의 형식 문자열은 다음과 같습니다. "%Y-%m-%dT%H:%M:%SZ".

jq는 일부 시스템에서 이 날짜 기능의 일부 또는 전부를 지원하지 않을 수 있습니다.

jq '날짜'
"2015-03-05T23:51:47Z"
=> 1425599507

jq ´strptime("%Y-%m-%dT%H:%M:%SZ")´
"2015-03-05T23:51:47Z"
=> [2015,2,5,23,51,47,4,63]

jq ´strptime("%Y-%m-%dT%H:%M:%SZ")|mktime´
"2015-03-05T23:51:47Z"
=> 1425599507

조건부 비교


==, !=
´a == b´ 표현식은 a와 b의 결과가 같으면(즉,
동등한 JSON 문서를 나타내는 경우) 그렇지 않은 경우 'false'. 특히, 문자열
숫자와 같은 것으로 간주되지 않습니다. Javascript에서 오는 경우 jq's ==는 다음과 같습니다.
Javascript's === - 값이 같은 유형일 때만 같은 것으로 간주하고
같은 값.

!=는 "같지 않음"이고 ´a != b´는 ´a == b´의 반대 값을 반환합니다.

jq '.[] == 1'
[1, 1.0, "1", "바나나"]
=> 참, 참, 거짓, 거짓

그렇지 않으면
if A 그때 B 그렇지 않으면 C end 와 동일하게 행동할 것 B if A false 이외의 값을 생성하거나
null이지만 다음과 동일하게 작동 C 그렇지 않으면.

false 또는 null을 확인하는 것은 Javascript에서 찾을 수 있는 것보다 "진실성"에 대한 간단한 개념입니다.
또는 Python이지만 때때로 조건에 대해 더 명시적이어야 함을 의미합니다.
당신이 원하는: 예를 들어 다음을 사용하여 문자열이 비어 있는지 여부를 테스트할 수 없습니다. if .name을 그때 A 그렇지 않으면 B end,
당신은 더 같은 것이 필요합니다 if (.이름 | 길이) > 0 그때 A 그렇지 않으면 B end 대신.

조건 A가 여러 결과를 생성하는 경우 다음 중 하나라도 "참"으로 간주됩니다.
결과는 false 또는 null이 아닙니다. 결과가 XNUMX이면 거짓으로 간주됩니다.

if를 사용하여 더 많은 사례를 추가할 수 있습니다. ELIF A 그때 B 통사론.

jq '만약 . == 0 다음

"제로" elif . == 1 then "one" else "many" end´ 2 => "many"

>, >=, <=, <
비교 연산자 >, >=, <=, < 왼쪽 인수가 다음보다 큰지 여부를 반환합니다.
오른쪽 인수보다 크거나 같음, 작거나 같거나 작음
(각기).

순서는 에 대한 설명과 동일합니다. 종류위에.

jq'. < 5´
2
=> 사실

및/또는/아닙니다
jq는 일반 부울 연산자 and/or/not을 지원합니다. 그들은 동일한 진리의 기준을 가지고 있습니다
if 식 - false 및 null은 "거짓 값"으로 간주되며 다른 모든 것은
"진정한 가치".

이러한 연산자 중 하나의 피연산자가 여러 결과를 생성하는 경우 연산자 자체
각 입력에 대한 결과를 생성합니다.

지원 사실 연산자가 아니라 기본 제공 함수이므로 다음을 수행하는 필터로 호출됩니다.
다음과 같이 특수 구문을 사용하지 않고 파이프로 연결할 수 있는 항목 .foo .카페 | 지원.

이 세 가지는 "true" 및 "false" 값만 생성하므로 정품에만 유용합니다.
일반적인 Perl/Python/Ruby 관용구가 아닌 부울 연산
"value_that_may_be_null 또는 기본값". 이 형식의 "또는"을 사용하려면 다음 중에서 선택합니다.
조건을 평가하는 대신 두 개의 값을 사용하려면 아래의 "//" 연산자를 참조하세요.

jq '42 및 "문자열"'
null로
=> 사실

jq ``(참, 거짓) 또는 거짓'
null로
=> 참, 거짓

jq ``(참, 참) 및 (참, 거짓)'
null로
=> 참, 거짓, 참, 거짓

jq '[참, 거짓 | 아니다
null로
=> [거짓, 참]

대안투자 연산자 - //
형식의 필터 a // b 와 동일한 결과를 생성합니다. a만약 a 다른 결과를 낳는다
보다 그릇된null로. 그렇지 않으면, a // b 와 동일한 결과를 생성합니다. b.

이는 기본값을 제공하는 데 유용합니다. .foo // 1 평가할 것이다 1 만약 없다면 .foo
입력 요소입니다. 방법과 비슷해요 or 때때로 Python에서 사용됩니다(jq's or 연산자
엄격하게 부울 연산을 위해 예약되어 있습니다).

jq '.foo // 42'
{"푸": 19}
=> 19

jq '.foo // 42'
{}
=> 42

시도 잡기
다음을 사용하여 오류를 잡을 수 있습니다. 시도 EXP 따라 EXP. 첫 번째 표현식이 실행되고,
실패하면 두 번째는 오류 메시지와 함께 실행됩니다. 핸들러의 출력(인 경우)
any는 try할 표현식의 출력인 것처럼 출력됩니다.

XNUMXD덴탈의 시도 EXP 양식 용도 예외 처리기로.

jq 'try .a catch ".는 객체가 아닙니다"'
참된
=> ".은 객체가 아닙니다"

jq '[.[]|시도 .a]'
[{}, 참, {"a":1}]
=> [널, 1]

jq ``try error("일부 예외") catch .'
참된
=> "일부 예외"

파괴 아웃 of 제어 구조
try/catch의 편리한 사용은 다음과 같은 제어 구조에서 벗어나는 것입니다. 감소, 각각,
동안, 등등.

예 :

# "break"가 발생할 때까지 표현식을 반복합니다.
# 오류가 발생하면 오류를 다시 발생시키지 않고 반복을 중지합니다.
# 그러나 잡힌 오류가 "break"가 아니면 다시 발생시킵니다.
반복(exp) catch .=="break"를 시도한 다음 비어 있으면 else 오류가 발생합니다.

jq에는 "중단" 또는 "이동(뒤로)"을 위한 명명된 어휘 레이블에 대한 구문이 있습니다.

$out 라벨 | ... $아웃 ...

XNUMXD덴탈의 하다 $label_name 표현식은 프로그램이 가장 가까운 것처럼 작동하게 만듭니다.
(왼쪽으로) 상표 $label_name 생산 .

사이의 관계 하다 그리고 해당 상표 어휘적입니다. 라벨은 다음과 같아야 합니다.
휴식 시간부터 "표시"됩니다.

a에서 벗어나려면 감소예를 들면 :

$out 라벨 | .[]를 $item으로 줄입니다(null; if .==false이면 $out else ... end를 중단합니다).

다음 jq 프로그램은 구문 오류를 생성합니다.

탈출하다

라벨이 없기 때문에 $아웃 표시됩니다.

? 연산자
XNUMXD덴탈의 ? 연산자, 다음과 같이 사용됨 경험치?, 은 약어입니다. 시도 EXP.

jq '[.[]|(.a)?]'
[{}, 참, {"a":1}]
=> [널, 1]

정규병 표현 (PCRE)


jq는 PHP, Ruby, TextMate, Sublime Text와 마찬가지로 Oniguruma 정규식 라이브러리를 사용합니다.
등등이므로 여기서 설명은 jq 세부 사항에 중점을 둘 것입니다.

jq 정규식 필터는 다음 패턴 중 하나를 사용하여 사용할 수 있도록 정의됩니다.

문자열 | 필터(정규식)
문자열 | 필터(정규식; 플래그)
문자열 | 필터( [정규식] )
문자열 | 필터( [정규식, 플래그] )

여기서: * STRING, REGEX 및 FLAGS는 jq 문자열이며 jq 문자열 보간이 적용됩니다. *
문자열 보간 후 REGEX는 유효한 PCRE 정규식이어야 합니다. * FILTER는 다음 중 하나입니다. test,
일치포착, 아래에 설명되어 있습니다.

FLAGS는 지원되는 플래그 중 하나로 구성된 문자열입니다.

· g - 전역 검색(첫 번째 일치 항목뿐만 아니라 모든 일치 항목 찾기)

· i - 대소문자를 구분하지 않는 검색

· m - 다중 라인 모드('.'는 개행 문자와 일치함)

· n - 빈 일치 항목을 무시합니다.

· p - s 및 m 모드가 모두 활성화되었습니다.

· s - 단일 라인 모드('^' -> ``\A', ``$' -> ``\Z')

· l - 가능한 가장 긴 일치 항목 찾기

· x - 확장된 정규식 형식(공백 및 주석 무시)

x 패턴에서 공백을 일치시키려면 \s와 같은 이스케이프를 사용하십시오. 예:

· 테스트( "a\sb", "x" ).

REGEX 내에서 특정 플래그를 지정할 수도 있습니다.

· jq -n ´("테스트", "TEst", "teST", "TEST") | test( "(?i)te(?-i)st" )'

true, true, false, false로 평가됩니다.

[필요 1.5] 테스트(발), 테스트(정규식; 플래그)
처럼 일치, 그러나 일치 개체는 반환하지 않습니다. 참된 or 그릇된 여부에 대한
정규식은 입력과 일치합니다.

jq '테스트("foo")'
"foo"
=> 사실

jq '.[] | test("abc # 공백은 무시됩니다."; "ix")'
["xabcd", "ABC"]
=> 사실, 사실

[필요 1.5] 일치(발), 일치(정규식; 플래그)
일치 찾은 각 일치 항목에 대해 개체를 출력합니다. 일치 항목에는 다음 필드가 있습니다.

· 오프셋 - 입력 시작 부분부터 UTF-8 코드 포인트 오프셋

· 길이 - 일치하는 UTF-8 코드포인트의 길이

· - 일치하는 문자열

· 캡처 - 캡처 그룹을 나타내는 개체 배열입니다.

캡처 그룹 개체에는 다음과 같은 필드가 있습니다.

· 오프셋 - 입력 시작 부분부터 UTF-8 코드 포인트 오프셋

· 길이 - 이 캡처 그룹의 UTF-8 코드 포인트 길이

· - 캡처된 문자열

· name - 캡처 그룹의 이름(또는 null로 이름이 없는 경우)

아무것도 일치하지 않는 그룹을 캡처하면 -1의 오프셋이 반환됩니다.

jq 'match("(abc)+"; "g")'
"abc abc"
=> {"오프셋": 0, "길이": 3, "문자열": "abc", "캡처": [{"오프셋": 0, "길이": 3, "문자열": "abc", " name": null}]}, {"offset": 4, "length": 3, "string": "abc", "captures": [{"offset": 4, "length": 3, "string" : "abc", "이름": null}]}

jq '일치("foo")'
"푸 바 푸"
=> {"오프셋": 0, "길이": 3, "문자열": "foo", "캡처": []}

jq 'match(["foo", "ig"])'
"푸 바 FOO"
=> {"오프셋": 0, "길이": 3, "문자열": "foo", "캡처": []}, {"오프셋": 8, "길이": 3, "문자열": "FOO ", "캡처": []}

jq 'match("foo (? 술집)? foo"; "ig")´
"푸 바 푸 푸 푸"
=> {"오프셋": 0, "길이": 11, "문자열": "foo bar foo", "캡처": [{"오프셋": 4, "길이": 3, "string": "bar" , "name": "bar123"}]}, {"offset": 12, "length": 8, "string": "foo foo", "captures": [{"offset": -1, "length" : 0, "문자열": null, "이름": "bar123"}]}

jq '[ match("."; "g")] | 길이
"알파벳"
=> 3

[필요 1.5] 캡처(발), 캡처(정규식; 플래그)
각 캡처의 이름을 키로 사용하여 JSON 개체에 명명된 캡처를 수집합니다.
일치하는 문자열을 해당 값으로 사용합니다.

jq 'capture("(? [az]+)-(? [0-9]+)")'
"xyzzy-14"
=> { "a": "xyzzy", "n": "14" }

[필요 1.5] 스캔(정규식), 스캔(정규식; 플래그)
정규식과 일치하는 입력의 겹치지 않는 하위 문자열 스트림을 내보냅니다.
지정된 경우 플래그에 따라. 일치하는 항목이 없으면 스트림은 다음과 같습니다.
비어 있는. 각 입력 문자열에 대한 모든 일치 항목을 캡처하려면 관용구를 사용하십시오. [ 특급 ], 예. [
스캔(정규식) ].

분할(정규식; 플래그)
이전 버전과의 호환성을 위해 분열 정규식이 아닌 문자열로 분할됩니다.

[필요 1.5] 분할(정규식), 분할(정규식; 플래그)
이들은 다음과 동일한 결과를 제공합니다. 분열 대응하지만 스트림 대신
정렬.

[필요 1.5] 하위(정규식; 문자열) 하위(정규식; 끈; 플래그)
입력 문자열에서 첫 번째 정규식 일치 항목을 다음으로 대체하여 얻은 문자열을 내보냅니다.
tostring, 보간 후. tostring jq 문자열이어야 하며 참조를 포함할 수 있습니다.
명명된 캡처에. 명명된 캡처는 실제로 JSON 개체로 표시됩니다(예:
에 의해 건설 포착)에 tostring, 따라서 "x"라는 캡처된 변수에 대한 참조는
"(.x)" 형식을 취합니다.

[필요 1.5] gsub(정규식; 끈), gsub(정규식; 끈; 플래그)
gsub 처럼 이하 그러나 정규식의 겹치지 않는 모든 항목은 다음으로 대체됩니다.
문자열, 보간 후.

고사양 STYLE


변수는 대부분의 프로그래밍 언어에서 절대적으로 필요하지만 강등되었습니다.
jq의 "고급 기능"에.

대부분의 언어에서 변수는 데이터를 전달하는 유일한 수단입니다. 을 계산하면
값을 두 번 이상 사용하려면 변수에 저장해야 합니다. 에게
프로그램의 다른 부분에 값을 전달하려면 프로그램의 해당 부분이 필요합니다.
배치할 변수를 함수 매개변수, 객체 멤버 등으로 정의합니다.
자료.

jq에서 함수를 정의하는 것도 가능합니다.
사용은 jq의 표준 라이브러리를 정의하는 것입니다(예: 지도발견 실제로
jq)로 작성되었습니다.

jq에는 매우 강력하지만 약간 까다로운 축소 연산자가 있습니다. 다시 말하지만 이들은
jq 표준 라이브러리의 유용한 비트를 정의하기 위해 주로 내부적으로 사용됩니다.

처음에는 명확하지 않을 수도 있지만 jq는 모두 생성기에 관한 것입니다(예,
다른 언어). 발전기를 다루는 데 도움이 되는 일부 유틸리티가 제공됩니다.

일부 최소한의 I/O 지원(표준 입력에서 JSON을 읽고 JSON을 작성하는 것 외에)
표준 출력)을 사용할 수 있습니다.

마지막으로 모듈/라이브러리 시스템이 있습니다.

변수
jq에서는 모든 필터에 입력과 출력이 있으므로 수동 배관이 필요하지 않습니다.
프로그램의 한 부분에서 다음 부분으로 값을 전달합니다. 예를 들어 다양한 표현 a + b,
두 개의 서로 다른 하위 표현식에 입력을 전달합니다(여기서는 ab 둘 다 똑같이 통과됐어
입력), 따라서 값을 두 번 사용하기 위해 일반적으로 변수가 필요하지 않습니다.

예를 들어 숫자 배열의 평균값을 계산하려면 몇 가지 작업이 필요합니다.
대부분의 언어에서 변수 - 배열을 보유하기 위한 최소한 하나, 아마도 각 요소에 대해 하나씩
또는 루프 카운터의 경우. jq에서는 간단합니다. 더하다 / 길이 - 더하다 표현은 주어진다
배열을 생성하고 그 합계를 생성합니다. 길이 표현식에 배열이 주어지고 그 배열을 생성합니다.
길이.

따라서 일반적으로 변수를 정의하는 것보다 jq의 대부분의 문제를 해결하는 더 깔끔한 방법이 있습니다.
그래도 때로는 작업이 더 쉬워지므로 jq를 사용하면 다음을 사용하여 변수를 정의할 수 있습니다.
표현 as $ 변수. 모든 변수 이름은 다음으로 시작합니다. $. 여기 약간 더 추악한 버전이 있습니다.
배열 평균화 예:

길이를 $array_length로 | 추가 / $array_length

실제로 변수를 사용하는 상황을 찾으려면 더 복잡한 문제가 필요합니다.
우리의 삶을 더 쉽게 만듭니다.

"author" 및 "title" 필드가 있는 블로그 게시물 배열이 있고,
작성자의 사용자 이름을 실제 이름에 매핑하는 데 사용되는 개체입니다. 우리의 입력은 다음과 같습니다:

{"게시물": [{"제목": "첫 번째 psot", "작성자": "anon"},
{"title": "잘 쓰여진 기사", "author": "person1"}],
"realnames": {"anon": "익명 겁쟁이",
"person1": "사람 맥퍼슨"}}

다음과 같이 실제 이름이 포함된 작성자 필드를 사용하여 게시물을 생성하려고 합니다.

{"title": "Frist psot", "author": "익명의 겁쟁이"}
{"title": "잘 쓰여진 기사", "author": "Person McPherson"}

$names라는 변수를 사용하여 나중에 참조할 수 있도록 realnames 객체를 저장합니다.
작성자 사용자 이름을 찾을 때:

.realnames를 $names로 | .posts[] | {제목, 저자: $names[.author]}

표현식 특급 as $x | ... 의미: 표현식의 각 값에 대해 특급, 나머지 부분을 실행
전체 원본 입력이 포함된 파이프라인과 $x 해당 값으로 설정합니다. 따라서 as
foreach 루프의 일부로 작동합니다.

마찬가지로 {푸} 편리한 글쓰기 방법입니다 {푸: .foo}그래서 {$foo} 편리한 글쓰기 방법입니다
{foo:$foo}.

단일 변수를 사용하여 여러 변수를 선언할 수 있습니다. as 패턴을 제공하여 표현
입력의 구조와 일치하는 것(이를 "구조화 해제"라고 함):

. {realnames: $names, 게시물: [$first, $second]}로 | ...

배열 패턴의 변수 선언(예: . as [$첫 번째, $초])에 바인딩
배열의 요소는 인덱스 XNUMX의 요소부터 순서대로 배열됩니다. 없을 때
배열 패턴 요소의 인덱스 값, null로 해당 변수에 바인딩되어 있습니다.

변수는 이를 정의하는 나머지 표현식에 걸쳐 범위가 지정됩니다.

.realnames를 $names로 | (.posts[] | {제목, 작성자: $names[.author]})

작동하지만

(.realnames를 $names로 | .posts[]) | {제목, 저자: $names[.author]}

습관.

프로그래밍 언어 이론가에게는 jq 변수가 다음과 같다고 말하는 것이 더 정확합니다.
어휘 범위 바인딩. 특히 바인딩 값을 변경할 수 있는 방법은 없습니다.
동일한 이름을 가진 새 바인딩만 설정할 수 있지만 어디에는 표시되지 않습니다.
오래된 것은 그랬다.

jq '.bar를 $x로 | .foo | . + $x'
{"foo":10, "바":200}
=> 210

jq'. $i|[(.*2|. $i| $i), $i]'
5
=> [10,5]

jq'. [$a, $b, {c: $c}]로 | $a + $b + $c'
[2, 3, {"c": 4, "d": 5}]
=> 9

jq '.[] 를 [$a, $b]로 | {a: $a, b: $b}´
[[0], [0, 1], [2, 1, 0]]
=> {"a":0,"b":null}, {"a":0,"b":1}, {"a":2,"b":1}

정의 기능
"def" 구문을 사용하여 필터에 이름을 지정할 수 있습니다.

정의 증분: . + 1;

그때부터, 증가 내장 함수처럼 필터로 사용할 수 있습니다(사실 이
내장 기능 중 일부가 정의되는 방식입니다.) 함수는 인수를 취할 수 있습니다:

def 맵(f): [.[] | 에프];

인수는 값이 아닌 필터로 전달됩니다. 동일한 주장이 참조될 수 있음
다른 입력으로 여러 번(여기 f 입력 배열의 각 요소에 대해 실행됩니다).
함수에 대한 인수는 값 인수보다는 콜백과 유사하게 작동합니다. 이것은
이해하는 것이 중요합니다. 고려하다:

def foo(f): f|f;
5|foo(.*2)

결과는 20이 될 것입니다. 왜냐하면 f is .*삼, 그리고 처음 호출하는 동안 f . 5가 될 것이다,
두 번째에는 10(5 * 2)이 되므로 결과는 20이 됩니다. 함수 인수
필터이며 필터는 호출될 때 입력을 기대합니다.

간단한 함수를 정의하기 위해 값-인수 동작을 원하면 다음을 사용할 수 있습니다.
변하기 쉬운:

def addvalue(f): f를 $f로 | 지도(.+$f);

또는 약어를 사용하십시오.

def addvalue($f): ...;

어느 정의를 사용하든, 값 추가(.foo) 현재 입력을 추가합니다 .foo 필드를 각각
배열의 요소입니다.

동일한 함수 이름을 사용하는 여러 정의가 허용됩니다. 각 재정의는 다음을 대체합니다.
동일한 수의 함수 인수에 대한 이전 항목이지만 다음의 참조에만 해당됩니다.
재정의 이후의 기능(또는 메인 프로그램).

jq 'def addvalue(f): . + [에프]; 지도(추가값(.[0]))'
[[1,2],[10,20]]
=> [[1,2,1], [10,20,10]]

jq ``def addvalue(f): f를 $x로 | 지도(.+$x); 값 추가(.[0])'
[[1,2],[10,20]]
=> [[1,2,1,2], [10,20,1,2]]

줄입니다
XNUMXD덴탈의 감소 jq의 구문을 사용하면 표현식의 모든 결과를 다음과 같이 결합할 수 있습니다.
그것들을 하나의 대답으로 모으는 것입니다. 예를 들어, [3,2,1] 이에 대한
표현:

.[]를 $item (0; . + $item)으로 줄입니다.

각 결과에 대해 .[] 생산하다, . + $item 누계를 누적하기 위해 실행됩니다.
0부터 시작합니다. 이 예에서는 .[] 결과 3, 2, 1이 생성되므로 효과는 다음과 같습니다.
다음과 같이 실행하는 것과 유사합니다.

0 | ($item으로 3 | . + $item) |
(2 $item | . + $item) |
($item | . + $item으로 1)

jq 'reduce .[]를 $item (0; . + $item)'으로
[10,2,5,3]
=> 20

제한(n; 특급)
XNUMXD덴탈의 제한 함수는 최대 n 출력 특급.

jq ``[한계(3;.[])]'
[0,1,2,3,4,5,6,7,8,9]
=> [0,1,2]

첫 번째(expr), 마지막(expr), n번째(n; 특급)
XNUMXD덴탈의 첫 번째(expr)마지막(expr) 함수는 다음에서 첫 번째 값과 마지막 값을 추출합니다. 특급,
각각.

XNUMXD덴탈의 n번째(n; 특급) 함수는 다음과 같이 출력된 n번째 값을 추출합니다. 특급. 이는 다음과 같이 정의될 수 있습니다.
def n번째(n; 특급): 마지막(한도(n + 1; 특급));. 그 주 n번째(n; 특급) 지원하지 않습니다
음수 값 n.

jq '[첫 번째(범위(.)), 마지막(범위(.)), n번째(./2; 범위(.))]'
10
=> [0,9,5]

먼저, 마지막, n번째(n)
XNUMXD덴탈의 먼저지난 함수는 임의의 배열에서 첫 번째 값과 마지막 값을 추출합니다. ..

XNUMXD덴탈의 n번째(n) 함수는 임의의 배열에서 n번째 값을 추출합니다. ..

jq '[범위(.)]|[첫 번째, 마지막, n 번째(5)]'
10
=> [0,9,5]

각각
XNUMXD덴탈의 각각 구문은 다음과 비슷합니다 감소, 그러나 다음의 구성을 허용하도록 의도되었습니다. 제한
중간 결과를 생성하는 리듀서(예제 참조)

형태는 각각 EXP as $var (초기화; 업데이트; 발췌). 같은 감소, INIT 평가된다
한 번 상태 값을 생성한 다음 각 출력은 EXP 묶여있다 $var, UPDATE is
각 출력에 대해 평가됩니다. EXP 현재 상태와 $var 보이는. 각 값
출력 UPDATE 이전 상태를 대체합니다. 마지막으로, 추출물 각각의 새로운 항목에 대해 평가됩니다.
출력을 추출하는 상태 각각.

이는 주로 구성에만 유용합니다. 감소- 그리고 제한-같은 기능. 하지만 그것은
부분적인 축소가 가능하므로 훨씬 더 일반적입니다(아래 예 참조).

jq '[foreach .[] as $item ([[],[]]; if $item == null then [[],.[0]] else [(.[0] + [$item]),[ ]] 끝; $item == null이면 .[1] else 빈 끝)]'
[1,2,3,4,널,"a","b",널]
=> [[1,2,3,4],["a","b"]]

재귀
위에서 설명한대로 재귀 재귀를 사용하며 모든 jq 함수는 재귀적일 수 있습니다. 그만큼
동안 내장은 재귀 측면에서도 구현됩니다.

재귀 호출의 왼쪽 표현식이 출력될 때마다 테일 호출이 최적화됩니다.
마지막 값입니다. 실제로 이는 재귀 함수의 왼쪽 표현식이
호출은 각 입력에 대해 둘 이상의 출력을 생성해서는 안 됩니다.

예 :

def recurse(f): def r: ., (f | select(. != null) | r); 아르 자형;

def while(조건; 업데이트):
def _while:
if cond then ., (업데이트 | _while) else 빈 끝;
_하는 동안;

def 반복(exp):
데프_반복:
특급, _repeat;
_반복하다;

발전기 반복자
일부 jq 연산자와 함수는 실제로 XNUMX을 생성할 수 있다는 점에서 생성기입니다.
다른 프로그래밍에서 예상할 수 있는 것처럼 각 입력에 대해 하나 이상의 값
생성기가 있는 언어. 예를 들어, .[] 입력의 모든 값을 생성합니다.
(배열 또는 객체여야 함) 범위(0; 10) 0과 사이의 정수를 생성합니다.
10 등.

쉼표 연산자도 생성기이므로 먼저 생성된 값을 생성합니다.
쉼표 왼쪽에 표현식을 입력하면 각 항목에 대해 값이 생성됩니다.
쉼표 오른쪽에 있는 표현.

XNUMXD덴탈의 내장은 XNUMX 출력을 생성하는 생성기입니다. 그만큼 내장
이전 생성기 표현식으로 역추적합니다.

모든 jq 함수는 내장 생성기를 사용하여 생성자가 될 수 있습니다. 또한 가능하다
재귀와 쉼표 연산자만 사용하여 새 생성기를 정의합니다. 재귀적인 경우
호출(들)이 "꼬리 위치에" 있으면 생성기가 효율적입니다. 예제에서는
재귀 호출 아래 _범위 자신이 꼬리 위치에 있습니다. 예제가 과시됩니다.
세 가지 고급 주제: 꼬리 재귀, 생성기 구성 및 하위 기능.

jq ``def range(init; upto; by): def _range: if (by > 0 and . < upto) 또는 (by < 0 and . > upto) then ., ((.+by)|_range) else . 끝; if by == 0 then init else init|_range end | select((> 0 및 . < 최대) 또는 (< 0 및 . > 최대)); 범위(0; 10; 3)'
null로
=> 0, 3, 6, 9

jq ``def while(cond; update): def _while: if cond then ., (update | _while) else 빈 끝; _하는 동안; [동안(.<100; .*2)]'
1
=> [1,2,4,8,16,32,64]

수학


jq는 현재 IEEE754 배정밀도(64비트) 부동 소수점 숫자만 지원합니다.

다음과 같은 간단한 산술 연산자 외에도 +, jq에는 대부분의 표준 수학 함수도 있습니다.
C 수학 라이브러리에서. 단일 입력 인수를 사용하는 C 수학 함수(예: 죄())
인수가 없는 jq 함수로 사용할 수 있습니다. 두 개의 입력을 받는 C 수학 함수
인수(예: 포())는 무시하는 두 개의 인수로 구성된 jq 함수로 사용할 수 있습니다. ..

표준 수학 함수의 가용성은 해당 기능의 가용성에 따라 달라집니다.
운영 체제 및 C 수학 라이브러리의 수학 함수. 사용할 수 없는 수학 함수
정의되지만 오류가 발생합니다.

I / O


현재 jq는 I/O에 대한 최소한의 지원을 제공하며 대부분 언제 제어할 수 있는지에 대한 형태로 제공됩니다.
입력을 읽습니다. 이를 위해 두 가지 내장 함수가 제공됩니다. 입력입력, 읽은 것
동일한 출처(예: 표준, 명령줄에 명명된 파일)을 jq 자체로 지정합니다. 이것들
두 개의 내장 기능과 jq의 자체 읽기 동작이 서로 인터리브될 수 있습니다.

하나의 내장 기능은 최소한의 출력 기능을 제공합니다. 디버그. (jq 프로그램이
출력 값은 항상 JSON 텍스트로 출력됩니다. 표준 출력.) 디버그 내장은 가질 수 있습니다
libjq C API를 사용하지만 그렇지 않은 실행 파일과 같은 애플리케이션별 동작
jq 실행 파일 자체.

입력
하나의 새로운 입력을 출력합니다.

입력
나머지 입력을 모두 하나씩 출력합니다.

이는 주로 프로그램의 입력을 줄이는 데 유용합니다.

디버그
입력 값을 기반으로 디버그 메시지가 생성되도록 합니다. jq 실행 파일이 래핑됩니다.
입력 값 ["디버그:", ] 그리고 stderr에 개행 문자를 인쇄합니다.
컴팩트하게. 이는 향후 변경될 수 있습니다.

입력_파일명
입력이 현재 필터링되고 있는 파일의 이름을 반환합니다. 참고하세요.
jq가 UTF-8 로케일에서 실행되지 않으면 제대로 작동하지 않습니다.

입력_라인_번호
현재 필터링 중인 입력의 줄 번호를 반환합니다.

스트리밍


와 더불어 --개울 옵션 jq는 스트리밍 방식으로 입력 텍스트를 구문 분석할 수 있으므로 jq가 허용됩니다.
구문 분석 후가 아닌 즉시 큰 JSON 텍스트 처리를 시작하는 프로그램
완료합니다. 크기가 1GB인 단일 JSON 텍스트가 있는 경우 이를 스트리밍하면
훨씬 더 빠르게 처리할 수 있습니다.

그러나 스트리밍은 jq 프로그램이 처리하기 쉽지 않습니다. [ ,
] (및 몇 가지 다른 형식)을 입력으로 사용합니다.

스트림을 더 쉽게 처리할 수 있도록 여러 내장 기능이 제공됩니다.

아래 예에서는 스트리밍 형식을 사용합니다. [0,[1]]어느입니다
[[0],0],[[1,0],1],[[1,0]],[[1]].

스트리밍 양식에는 다음이 포함됩니다. [ , ] (스칼라 값, 빈 배열,
또는 빈 개체) 및 [ ] (배열이나 객체의 끝을 나타냄) 미래
다음으로 실행되는 jq 버전 --개울-seq 다음과 같은 추가 양식을 출력할 수 있습니다. ["오류
메시지"] 입력 텍스트를 구문 분석하지 못하는 경우.

truncate_stream(스트림_표현)
숫자를 입력으로 사용하고 해당 경로 요소 수를 자릅니다.
주어진 스트리밍 표현식의 출력 왼쪽.

jq ´[1|truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]])]´
1
=> [[[0],2],[[0]]]

fromstream(stream_expression)
스트림 표현식의 출력에 해당하는 값을 출력합니다.

jq ´fromstream(1|truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]]))´
null로
=> [2]

스트림으로
XNUMXD덴탈의 스트림으로 내장은 입력의 스트리밍 형식을 출력합니다.

jq'. $dot|fromstream($dot|tostream)|.==$dot'
[0,[1,{"a":1},{"b":2}]]
=> 사실

할당


jq에서는 할당이 대부분의 프로그래밍 언어와 약간 다르게 작동합니다. jq는 그렇지 않습니다
무언가에 대한 참조와 복사본을 구별합니다. 두 객체 또는 배열은
"동일한 객체"이거나 "동일하지 않음"에 대한 추가 개념 없이 동일하거나 동일하지 않음
같은 개체입니다."

객체에 배열인 두 개의 필드가 있는 경우 .foo.카페, 그리고 당신은 뭔가를 추가
.foo다음, .카페 커지지 않을 것입니다. 방금 설정했더라도 .카페 = .foo. 만약 당신이 익숙하다면
Python, Java, Ruby, Javascript 등과 같은 언어로 프로그래밍하는 것에 대해 생각할 수 있습니다.
마치 jq가 할당을 수행하기 전에 모든 객체의 전체 깊은 복사본을 수행하는 것처럼 보입니다.
(성능상 실제로는 그렇게 하지 않지만 이것이 일반적인 생각입니다).

jq의 모든 할당 연산자는 왼쪽에 경로 표현식이 있습니다.

=
필터 .foo = 1 객체를 입력으로 받아 출력으로 객체를 생성합니다.
"foo" 필드가 1로 설정되었습니다. jq에는 무언가를 "수정"하거나 "변경"한다는 개념이 없습니다.
모든 jq 값은 변경할 수 없습니다. 예를 들어,

.foo = .bar | .foo.baz = 1

.bar.baz를 1로 설정해도 부작용이 없습니다.
Javascript, Python, Ruby 또는 기타 언어로 프로그램을 작성합니다. 이들 언어와는 달리(그러나
하스켈이나 다른 함수형 언어처럼), 두 개의 배열이라는 개념이 없습니다.
객체는 "동일한 배열" 또는 "동일한 객체"입니다. 같을 수도 있고 같지 않을 수도 있지만
우리가 그 중 하나를 바꾸면 어떤 상황에서도 다른 하나는 우리 뒤에서 바뀌지 않을 것입니다.

이는 jq에서 순환 값을 만드는 것이 불가능하다는 것을 의미합니다(예:
첫 번째 요소는 그 자체입니다). 이것은 매우 의도적인 것이며 jq가 무엇이든 보장합니다.
프로그램이 생성할 수 있는 내용은 JSON으로 표현될 수 있습니다.

'='의 왼쪽은 다음의 값을 나타냅니다. .. 그러므로 $var.foo = 1 작동하지 않습니다
예상대로 ($var.foo 유효하지 않거나 유용한 경로 표현식이 아닙니다. .); 사용 $var | .foo = 1
대신.

'='의 오른쪽이 여러 값을 생성하는 경우 각 값에 대해 jq는
왼쪽의 경로를 값으로 설정하면 수정된 결과가 출력됩니다. ..
예를 들어, (.a,.b)=범위(2) 출력 {"a":0,"b":0}다음, {"a":1,"b":1}. "업데이트"
과제 양식(아래 참조)에서는 이 작업을 수행하지 않습니다.

그것도 참고하세요 .a,.b=0 설정하지 않습니다 .a.b하지만, (.a,.b)=0 둘 다 설정합니다.

|=
할당 연산자 '=' 외에도 jq는 "업데이트" 연산자 '|='를 제공합니다.
오른쪽에 있는 필터를 사용하여 속성에 대한 새 값을 계산합니다. .
이 표현식을 통해 이전 값을 실행하여 할당됩니다. 예를 들어, .foo |=
.+1은 입력의 "foo"에 1을 더한 "foo" 필드를 사용하여 개체를 만듭니다.

이 예는 ``='와 ``|='의 차이점을 보여줍니다.

프로그램에 입력 '{"a": {"b": 10}, "b": 20}'을 제공합니다.

.a = .b .a |= .b

전자는 입력의 "a" 필드를 입력의 "b" 필드로 설정하고 다음을 생성합니다.
출력 {"a": 20}. 후자는 입력의 "a" 필드를 "a" 필드로 설정합니다.
"b" 필드, {"a": 10} 생성.

왼쪽은 일반적인 경로 표현일 수 있습니다. 보다 길().

'|='의 왼쪽은 다음의 값을 나타냅니다. .. 그러므로 $var.foo |= . + 1 습관
예상대로 작동합니다 ($var.foo 유효하지 않거나 유용한 경로 표현식이 아닙니다. .); 사용 $var | .foo
|= . + 1 대신.

오른쪽이 여러 값을 출력하는 경우 마지막 값만 사용됩니다.

jq '(..|select(type=="boolean")) |= if . 그 다음 1 else 0 end'
[참,거짓,[5,참,[참,[거짓]],거짓]]
=> [1,0,[5,1,[1,[0]],0]]

+=, -=, *=, /=, %=, // =
jq에는 다음 형식의 몇 가지 연산자가 있습니다. a op= b, 이는 모두 다음과 같습니다. a |= . op b. 그래서,
+= 1 값을 증가시키는 데 사용할 수 있습니다.

jq '.foo += 1'
{"푸": 42}
=> {"foo": 43}

복잡한 할당
jq 할당의 왼쪽에는 대부분의 것보다 더 많은 것들이 허용됩니다.
언어. 우리는 이미 왼쪽에서 간단한 필드 액세스를 보았지만 그렇지 않습니다.
배열 액세스도 잘 작동한다는 사실에 놀랐습니다.

.posts[0].title = "JQ 매뉴얼"

놀랍게도 왼쪽의 표현은 여러 결과를 생성할 수 있다는 것입니다.
입력 문서의 다른 지점을 참조하는 결과:

.posts[].comments |= . + ["이거 정말 좋아요"]

이 예는 각 게시물의 "comments" 배열에 "this is great"라는 문자열을 추가합니다.
입력(여기서 입력은 게시물 배열인 "posts" 필드가 있는 개체임)

jq가 'a = b'와 같은 할당을 발견하면 a를 선택하는 데 사용된 "경로"를 기록합니다.
실행 중 입력 문서의 일부 a. 그런 다음 이 경로는 다음 중 어느 부분을 찾는 데 사용됩니다.
할당을 실행하는 동안 변경할 입력입니다. 모든 필터를 사용할 수 있습니다.
같음의 왼쪽 - 입력에서 선택한 경로가 무엇이든
할당이 수행됩니다.

이것은 매우 강력한 작업입니다. 다음을 사용하여 블로그 게시물에 댓글을 추가하고 싶다고 가정해 보겠습니다.
위와 동일한 "블로그" 입력입니다. 이번에는 님이 작성한 게시물에만 댓글을 달고자 합니다.
"스테돌란". 앞에서 설명한 "select" 기능을 사용하여 해당 게시물을 찾을 수 있습니다.

.posts[] | select(.author == "스테돌란")

이 작업에서 제공하는 경로는 "stedolan"이 작성한 각 게시물을 가리킵니다.
이전과 동일한 방식으로 각각에 대해 설명할 수 있습니다.

(.posts[] | select(.author == "stedolan") | .comments) |=
. + ["끔찍하다."]

모듈


jq에는 라이브러리/모듈 시스템이 있습니다. 모듈은 이름이 다음으로 끝나는 파일입니다. .jq.

프로그램에서 가져온 모듈은 기본 검색 경로에서 검색됩니다(아래 참조). 그만큼
import포함 지시문을 사용하면 가져오기 도구가 이 경로를 변경할 수 있습니다.

검색 경로의 경로는 다양하게 대체될 수 있습니다.

"~/"로 시작하는 경로의 경우 사용자의 홈 디렉터리가 "~"로 대체됩니다.

"$ORIGIN/"으로 시작하는 경로의 경우 jq 실행 파일의 경로가 다음으로 대체됩니다.
"$ORIGIN".

"./"로 시작하는 경로 또는 "."인 경로의 경우 포함 파일의 경로는 다음과 같습니다.
"."으로 대체되었습니다. 명령줄에 제공된 최상위 프로그램의 경우 현재
디렉토리가 사용됩니다.

Import 지시문은 선택적으로 기본값이 추가되는 검색 경로를 지정할 수 있습니다.

기본 검색 경로는 다음에 지정된 검색 경로입니다. -L 명령줄 옵션, else
["~/.jq", "$ORIGIN/../lib/jq", "$ORIGIN/../ lib"].

Null 및 빈 문자열 경로 요소는 검색 경로 처리를 종료합니다.

상대 경로가 "foo/bar"인 종속성은 "foo/bar.jq"에서 검색되고
지정된 검색 경로의 "foo/bar/bar.jq"입니다. 이는 모듈을 배치할 수 있도록 하기 위한 것입니다.
예를 들어 버전 제어 파일, README 파일 등과 함께 디렉토리에
뿐만 아니라 단일 파일 모듈도 허용합니다.

모호함을 피하기 위해 동일한 이름을 가진 연속 구성요소는 허용되지 않습니다(예:
"foo/foo").

예를 들어 -L$HOME/.jq 모듈 에 있습니다 $HOME/.jq/foo.jq
$HOME/.jq/foo/foo.jq.

"$HOME/.jq"가 파일인 경우 기본 프로그램에 소스가 제공됩니다.

import 상대 경로 문자열 as 이름 [ ];
검색 경로의 디렉터리를 기준으로 지정된 경로에서 찾은 모듈을 가져옵니다. ".jq"
상대 경로 문자열에 접미사가 추가됩니다. 모듈의 기호 앞에는
"이름::".

선택적 메타데이터는 상수 jq 표현식이어야 합니다. 키가 있는 객체여야 합니다.
"홈페이지" 등과 같은 것입니다. 현재 jq는 "검색" 키/값만 사용합니다.
메타데이터. 메타데이터는 다음을 통해 사용자에게도 제공됩니다. 모듈메타 내장.

메타데이터에 "검색" 키가 있는 경우 문자열 또는 배열 값(배열)을 가져야 합니다.
문자열); 이는 최상위 검색 경로 앞에 붙는 검색 경로입니다.

포함 상대 경로 문자열 [ ];
마치 검색 경로의 디렉터리를 기준으로 주어진 경로에서 찾은 모듈을 가져옵니다.
장소에 포함되었습니다. 상대 경로 문자열에 ".jq" 접미사가 추가됩니다. 그만큼
모듈의 기호는 마치 모듈의 내용이 다음과 같은 것처럼 호출자의 네임스페이스로 가져옵니다.
직접 포함되었습니다.

선택적 메타데이터는 상수 jq 표현식이어야 합니다. 키가 있는 객체여야 합니다.
"홈페이지" 등과 같은 것입니다. 현재 jq는 "검색" 키/값만 사용합니다.
메타데이터. 메타데이터는 다음을 통해 사용자에게도 제공됩니다. 모듈메타 내장.

import 상대 경로 문자열 as $NAME [ ];
검색 경로의 디렉터리를 기준으로 지정된 경로에 있는 JSON 파일을 가져옵니다. ㅏ
상대 경로 문자열에 ".json" 접미사가 추가됩니다. 파일의 데이터는
로 사용 가능 $이름::이름.

선택적 메타데이터는 상수 jq 표현식이어야 합니다. 키가 있는 객체여야 합니다.
"홈페이지" 등과 같은 것입니다. 현재 jq는 "검색" 키/값만 사용합니다.
메타데이터. 메타데이터는 다음을 통해 사용자에게도 제공됩니다. 모듈메타 내장.

메타데이터에 "검색" 키가 있는 경우 문자열 또는 배열 값(배열)을 가져야 합니다.
문자열); 이는 최상위 검색 경로 앞에 붙는 검색 경로입니다.

모듈 ;
이 지시문은 전적으로 선택 사항입니다. 올바른 작동에는 필요하지 않습니다. 그것은 봉사한다
읽을 수 있는 메타데이터를 제공하는 목적만 모듈메타 내장.

메타데이터는 상수 jq 표현식이어야 합니다. 다음과 같은 키가 있는 객체여야 합니다.
"홈페이지". 현재 jq는 이 메타데이터를 사용하지 않지만 사용자가 사용할 수 있습니다.
를 통해 모듈메타 내장.

모듈메타
모듈 이름을 입력으로 사용하고 모듈의 메타데이터를 객체로 출력합니다.
모듈의 가져오기(메타데이터 포함)를 "deps" 키의 배열 값으로 사용합니다.

프로그램은 이를 사용하여 모듈의 메타데이터를 쿼리할 수 있습니다.
예를 들어 누락된 종속성을 검색, 다운로드 및 설치합니다.

onworks.net 서비스를 사용하여 온라인으로 jq 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

  • 1
    자 비츠
    자 비츠
    Zabbix는 엔터프라이즈급 개방형
    소스 분산 모니터링 솔루션
    모니터링 및 추적하도록 설계
    네트워크의 성능 및 가용성
    서버, 장치...
    자빅스 다운로드
  • 2
    KDiff3
    KDiff3
    이 저장소는 더 이상 유지 관리되지 않습니다.
    보관 목적으로 보관됩니다. 보다
    https://invent.kde.org/sdk/kdiff3 for
    최신 코드와
    https://download.kde.o...
    KDiff3 다운로드
  • 3
    USB로더GX
    USB로더GX
    USBLoaderGX는 GUI입니다.
    Waninkoko의 USB 로더를 기반으로
    libwiigui. 목록을 허용하고
    Wii 게임, 게임큐브 게임 출시 및
    Wii와 WiiU의 홈브류...
    USBLoaderGX 다운로드
  • 4
    파이어 버드
    파이어 버드
    Firebird RDBMS는 ANSI SQL 기능을 제공합니다.
    & Linux, Windows에서 실행 &
    여러 유닉스 플랫폼. 특징
    뛰어난 동시성 및 성능
    & 힘...
    파이어버드 다운로드
  • 5
    KompoZer
    KompoZer
    KompoZer는 다음을 사용하는 wysiwyg HTML 편집기입니다.
    Mozilla Composer 코드베이스. 같이
    Nvu의 개발이 중단되었습니다.
    2005년 KompoZer는 많은 버그를 수정하고
    f를 추가합니다...
    KompoZer 다운로드
  • 6
    무료 만화 다운로더
    무료 만화 다운로더
    FMD(무료 만화 다운로더)는
    로 작성된 오픈 소스 애플리케이션
    관리를 위한 오브젝트 파스칼 및
    다양한 웹사이트에서 만화를 다운로드합니다.
    이것은 거울...
    무료 만화 다운로더 다운로드
  • 더»

Linux 명령

Ad