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 프로그램의 큰 따옴표에는 백 슬래시 이스케이프가 필요합니다.