PowerShell을 사용하는 JQ의 문자열 리터럴 [중복]

Nov 30 2020

Powershell에서 JQ 문자열 리터럴을 사용할 수 없습니다. 예를 들어 다음은 Bash에서 예쁜 JSON 객체를 출력하지만 Powershell에서는 실패합니다.

PS C:\temp> jq --null-input '{"key":"val"}'

jq: error: val/0 is not defined at <top-level>, line 1:
{key:val}
jq: 1 compile error

처음에는 잘못된 인용이 의심되었지만 예상대로 Write-Output '{"key":"val"}'출력 {"key":"val"}됩니다.

JQ 필터를 파일에 작성하여 문제를 해결할 수 있습니다. .NET WriteAllText을 사용 하면 파일이 BOM없이 UTF-8로 인코딩됩니다.

PS C:\temp> [System.IO.File]::WriteAllText('basic.jq', '{"key":"val"}')
PS C:\temp> jq --null-input --from-file basic.jq
{
  "key": "val"
}

JQ 필터를 프로토 타이핑하고이를 PowerShell 스크립트에 통합하기위한보다 민첩한 접근 방식을 찾고 있습니다.

버전 : win64 용 JQ 1.6, PS 버전 5.1.18362.1171

답변

1 Inian Nov 30 2020 at 21:20

Powershell은 '..'표현식 내에서 큰 따옴표를 이스케이프 할 수 있습니다 . 시험

jq --null-input '{ "key": \"val\" }'

또는 바로 아래의 키 이름 jq에는 명시적인 따옴표가 필요하지 않습니다.

jq --null-input '{ key: \"val\" }'

로부터 jq수동에서 - 호출 JQ

Windows 명령 셸 ( cmd.exe)을 사용할 때 명령 줄 ( -f program-file옵션 대신)에 jq 프로그램을 지정할 때 큰 따옴표를 사용하는 것이 가장 좋지만 jq 프로그램의 큰 따옴표에는 백 슬래시 이스케이프가 필요합니다.