source

JSON JQ(기타 없는 경우)

lovecheck 2023. 2. 9. 22:44
반응형

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

반응형