다음 파일이 있습니다 config.json
.
{
"auths": {
"reg1.io": {
"auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"reg2.io": {
"auth": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
},
"reg3.io": {
"auth": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
}
}
}
reg2.io
나는 내가 얻고 싶은 물건을 계속 갖고 싶습니다 .
{
"auths": {
"reg2.io": {
"auth": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
}
}
}
다음과 같은 특정 개체를 삭제할 수 있습니다.
→ jq 'del(.. | ."reg2.io"? )' ./config.json
{
"auths": {
"reg1.io": {
"auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"reg3.io": {
"auth": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
}
}
}
하지만 특정 객체를 유지하고 싶다면 어떻게 해야 할까요? 감사해요.
답변1
원하는 키만 선택하려면 select()
with를 사용하세요 .with_entries()
$ jq '.auths |= with_entries(select(.key == "reg2.io"))' file
{
"auths": {
"reg2.io": {
"auth": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
}
}
}
명령줄에서 필요한 키를 가져오도록 매개변수화되었습니다.
$ jq --arg key "reg2.io" '.auths |= with_entries(select(.key == $key))' file
{
"auths": {
"reg2.io": {
"auth": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
}
}
}
지정된 키를 삭제하려면 ==
로 변경하세요 .!=
여러분의 시도는 문서에서 키가 어디에 있는지 구별할 수 없으므로 일반적인 경우에 약간의 혼란을 초래할 수 있습니다.
표현식에서 무슨 일이 일어나고 있는지에 대한 더 많은 설명을 추가하기만 하면 됩니다 jq
.
with_entries()
명령 에서 각각 a key
와 value
키가 있는 다음 개체 집합이 표시됩니다.
{
"key": "reg1.io",
"value": { "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
}
{
"key": "reg2.io",
"value": { "auth": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" }
}
{
"key": "reg3.io",
"value": { "auth": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" }
}
이 select()
호출은 특정 테스트에 대한 각 개체를 추출합니다.진짜, 나머지는 폐기합니다. 우리의 테스트는 단순히 " key
키의 값이 문자열입니까 reg2.io
?"입니다.
호출 with_entries(expr)
은 와 동일합니다 to_entries | map(expr) | from_entries
.