다음 위치에 JSON 파일이 있습니다 /tmp/target.json
.
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
...
}
}
다음과 같이 새 키 값 쌍을 추가하고 싶습니다.
{
"compileOnSave": false,
"compilerOptions": {
"skipLibCheck": true,
"baseUrl": "./",
...
}
}
다음 명령을 사용하지만 작동하지 않습니다.
jq --argjson addobj '{"skipLibCheck": "true"}' '
.compilerOptions{} |= $addobj
' /tmp/target.json
다음 오류가 발생합니다.
jq: error: syntax error, unexpected '{', expecting $end (Unix shell quoting issues?) at <top-level>, line 2:
.compilerOptions{} |= $addobj
jq: 1 compile error
내가 뭘 잘못했나요? 예상대로 작동하게 하려면 어떻게 해야 합니까?
답변1
이와 같이:
$ jq '.compilerOptions.skipLibCheck=true' file.json
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"skipLibCheck": true
}
}
답변2
키와 그 값을 추가하는 가장 간단한 방법이 도입되었습니다.다른 대답으로. 이 답변은 object 의 키 목록 끝에 키를 추가합니다 compilerOptions
. 일반적으로 키의 순서는 중요하지 않습니다. 사용할 수 있는 특정 방식으로 정렬해야 하는 경우대량으로. 그러나 어떤 이유로든 기존 키보다 먼저 키를 추가하고 싶어한다는 것을 알았습니다 baseUrl
.
해당 위치에 키를 추가할 수 있으며 기존 객체에 새 키를 추가하는 대신 기존 객체의 키를 새 키 끝에 추가합니다. 따라서 기존 JSON 문서가 주어지면
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"jerry": "Was a race car driver"
}
}
...우리는 사용하고 싶을 수도 있습니다
jq --argjson skipLibCheck true '.compilerOptions = $ARGS.named + .compilerOptions' file
위의 예제 문서를 보면 다음과 같은 결과가 생성됩니다.
{
"compileOnSave": false,
"compilerOptions": {
"skipLibCheck": true,
"baseUrl": "./",
"jerry": "Was a race car driver"
}
}
사물은 명령줄에서 $ARGS.named
사용 및/또는 정의된 키-값 쌍을 포함하는 개체입니다. 위의 예에서는 이 기능이 버전 1.5 이후에 도입되었습니다.--arg
--argjson
{"skipLibCheck":true}
$ARGS
jq
이전 1.5 버전의 경우 jq
다음을 사용할 수 있습니다.
jq --argjson skipLibCheck true '.compilerOptions = { skipLibCheck: $skipLibCheck } + .compilerOptions' file
값을 특수 부울이 아닌 문자열로 지정하려면 --arg
대신 사용하세요.--argjson
true
true
키를 추가하는 또 다른 방법은 다음과 같습니다.끝(다른 답변에서 언급된 내용) 위 명령과 동일한 패턴을 따릅니다. 또한 --arg
어떻게 보이는지 보여주기 위해 여기에 문자열 삽입으로 사용하도록 전환했습니다 .true
jq --arg skipLibCheck true '.compilerOptions += $ARGS.named' file
...당신에게 줄 것입니다
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"jerry": "Was a race car driver",
"skipLibCheck": "true"
}
}
이전 1.5 버전의 경우 jq
다음을 사용할 수 있습니다.
jq --arg skipLibCheck true '.compilerOptions += { skipLibCheck: $skipLibCheck }' file