JSON JQ(기타 없는 경우)
다음 JQ 명령을 사용하여 JSON을 필터링합니다.예상 노드가 존재할 경우 JSON 메시지를 필터링해야 합니다.아니면 아무것도 하지 마그래서 나는 만약, 엘리프…을 사용한다.
sed -n "s/.*Service - //p" $1/response.log* |
jq "if (.requests | length) != 0 then .requests |= map(select(.id == \"123\"))
elif (.result | length ) != 0 then .result |= map(select(.id== \"123\"))
else " " end" > ~/result.log
여기엔 다른 게 필수인 것 같아요나는 다른 블록 안에서 아무것도 하고 싶지 않다.그래도 다른 건 무시해도 되고, 아니면 그냥 안에 화이트페이스를 프린트해도 돼요.
위의 경우 결과 파일에서 큰따옴표 " "가 출력됩니다.
다음과 같은 관용구를 사용할 수 있습니다.
if CONDITION then WHATEVER else empty end
empty
는, 아무것도 출력하지 않는 필터입니다.null도 출력하지 않습니다.이것은 결국 무엇(즉, JSON 값)입니다.블랙홀과 비슷합니다. 단지 더 검을 뿐이죠. 무엇이든지 소비할 것입니다. 하지만 블랙홀과는 달리, 호킹의 방사능도 방출하지 않습니다.
이 경우 "elf"가 있으므로 "else empty"를 사용하는 것이 바람직할 수 있지만, 참고로 위의 내용은 정확히 다음과 같습니다.
select(CONDITION) | WHATEVER
추신. 제 추측으로는 sed 명령의 목적이 무엇이든, jq 프로그램의 일부로 더 안정적으로 수행될 수 있을 것 같습니다.walk/1
.
갱신하다
jq 1.6 출시 후, "if without else"가 "if _ then _ else . end"의 의미를 가지도록 변경되었다. 즉, 다음과 같다.
if P then Q end
===if P then Q else . end
개체를 더 이상 변경하지 않으므로 "ID" 필터를 사용하십시오..
.
if (.requests | length) then ... else . end
다른 한편으로, 당신은 단지 갱신하고 있을 뿐입니다.requests
또는result
속성(공백이 아닌 경우) 사용map
계산은 필요 없습니다.비어 있으면 비어 있는 상태로 돌아갑니다.
필터는 다음과 같이 단순화할 수 있습니다.
.requests |= map(select(.id == \"123\")) | .result |= map(select(.id== \"123\"))
언급URL : https://stackoverflow.com/questions/29949184/json-jq-if-without-else
'source' 카테고리의 다른 글
농담, 효소:불변 위반:또는 Router()를 외부에서 사용하여서는 안 됩니다. (0) | 2023.02.09 |
---|---|
Angular 5의 URL에서 쿼리 파라미터를 얻는 방법 (0) | 2023.02.09 |
PDO:: fetchAll vs. PDO:: 루프에서의 fetch (0) | 2023.02.01 |
PDO: MySQL 서버가 사라졌습니다. (0) | 2023.02.01 |
Express를 사용하여 NodeJS 서버에서 파일 다운로드 (0) | 2023.02.01 |