programing

문자열이 jq의 유효한 JSON인지 확인합니다.

golfzon 2023. 4. 4. 22:37
반응형

문자열이 jq의 유효한 JSON인지 확인합니다.

서비스를 들어 올릴 때 오류를 잡아야 합니다.응답은 다음과 같습니다.null, 다음과 같은 문자열 오류 메시지

error services-migration/foobar: Not found: services-migration/foobar

또는 모든 것이 정상일 때 유효한 JSON을 사용할 수 있습니다.어떻게 할 수 있을까 해서jq제공된 문자열이 유효한 JSON인지 확인하는 것만으로 끝납니다.문자열에서 다음과 같은 키워드를 확인할 수 있었습니다.errorf.e. 하지만 좀 더 강력한 옵션을 찾고 있어요.저는...true/false또는1/0jq에서.난 그 서류들을 뒤져보고 있었어jqSO에 관한 질문도 몇 가지 있습니다만, JSON에서 주요 값을 찾아내는 것이 전부였습니다.단순히 문자열을 검증하는 것은 아닙니다.

갱신:

이거 있어요.

 result=$(some command)

그 결과 스트링이 됩니다.error services-migration/foobar: Not found: services-migration/foobar

그리고 if 스테이트먼트:

 if jq -e . >/dev/null 2>&1 <<<"$result"; then
    echo "it catches it"
 else
    echo "it doesn't catch it"
 fi

그리고 그것은 항상 결국에 끝나게 된다.else절을 클릭합니다.

매뉴얼:

-e / --syslog-status:

마지막 출력 값이 false 또는 null이 아닌 경우 jq의 종료 상태를 0으로 설정하고, 마지막 출력 값이 false 또는 null인 경우 1, 유효한 결과가 생성되지 않은 경우 4로 설정합니다.통상, 사용상의 문제나 시스템 에러가 있는 경우는 jq가 2, jq 프로그램의 컴파일 에러가 있는 경우는 3, jq 프로그램이 실행되고 있는 경우는 0으로 종료됩니다.

다음 기능을 사용할 수 있습니다.

if jq -e . >/dev/null 2>&1 <<<"$json_string"; then
    echo "Parsed JSON successfully and got something other than false/null"
else
    echo "Failed to parse JSON, or got false/null"
fi

실제로 다른 유형의 오류를 구별하는 데 신경을 쓰지 않는다면-e전환합니다.이 경우 유효한 JSON(false/null 포함)으로 간주되는 모든 것이 필터에 의해 정상적으로 해석됩니다..프로그램이 정상적으로 종료되기 때문에if브랜치 뒤에 이어집니다.

이건 나한테 효과가 있어

echo $json_string | jq -e . >/dev/null 2>&1  | echo ${PIPESTATUS[1]}

반환 코드를 반환합니다.

  • 0 - 성공
  • 1 - 실패
  • 4 - 무효

그런 다음 추가 코드로 리턴 코드를 평가할 수 있습니다.

다음 명령 및 설명은 다음과 같습니다.jq가장 저렴한 방법으로 JSON을 검증할 수 있습니다.JSONLint와 같이 이 작업에 적합한 툴이 있다고 생각합니다만, 수중에 있는 것은,jq이게 제 기여입니다.

JSON 파일의 유효성을 확인하고도 에러를 표시하려면STDERR출력, 사용jq다음 bash 원라이너를 사용할 수 있습니다.

jq -reM '""' <<<'<MAYBE_INVALID_JSON>' 1>/dev/null

그 의미는 다음과 같습니다.

  • 실행jq플래그가 있는 경우:

    • -r원시 값을 출력하다(처리 또는 포맷 없음)
    • -e보다 큰 코드로 종료하다0
    • -MJSONJSON을
  • 번째 ★★★★★★★★★★★★★★.jq는 " " 입니다.'""'합니다.jq를 위한 것부터 합니다.

  • <<< 뒤에 은 "Here String이라고 불리며 처럼 취급하여 "Here String"으로 합니다.STDIN(일부러)

    , 이 경우는 수 .<<<'<MAYBE_INVALID_JSON>'하면, 그 동작합니다.

  • 다음 .STDOUT을 「(JSON을 포함한다)」로 합니다./dev/null

또한 다음 명령을 사용하여 오류 아래에 있는 커스텀메시지를 출력할 수도 있습니다.

jq -reM '""' <<<'<MAYBE_INVALID_JSON>' 1>/dev/null || ( exit_code="$?"; echo 'ERROR: Invalid JSON file. See errors above' 1>&2; exit "$exit_code" )

여기서 추가된 부분은 다음과 같습니다.

  • ||한 경우 합니다.
  • 「」로 .(원래 명령어의 종료 코드를 사용하여 종료해야 하므로 실제로 필요합니다.
    • 를 합니다.exit_code 에 대한 $?
    • 를 사용하여 합니다.echo
    • exit 명령어 $exit_code
  • 서브셸을 닫습니다.

선과 같은 가변 콘텐츠의 경우, 그것은 나에게 효과적이다.

echo "$my_potential_json"|jq empty > /dev/null 2>&1                                                                                                                                                
if [ $? -eq 0 ]; then
    echo "found valid json:$my_potential_json"
    do_whatever....

언급URL : https://stackoverflow.com/questions/46954692/check-if-string-is-a-valid-json-with-jq

반응형