programing

PowerShell: 특수 문자가 포함된 To-Json 변환 문제

magicmemo 2023. 9. 3. 12:31
반응형

PowerShell: 특수 문자가 포함된 To-Json 변환 문제

나는 JSON 파일을 변경하기 위해 스크립트를 작성하고 있지만 파일이 JSON으로 다시 변환되면 특수 문자가 확장됩니다.

예를 들어 JSON 파일에는 "&"이 있는 암호가 포함되어 있습니다.문제를 빠르게 복제하는 방법은 다음 명령을 사용하는 것입니다.

PS> "Password&123" | Json으로 변환 출력: "Password\u0026123"

##Here is how I import the JSON FILE:
$jsonfile = (Get-Content .\example.json -Encoding Ascii) -join "`n" | ConvertFrom-Json
##Exporting JSON FILE without modifying it.
$jsonfile  | ConvertTo-Json |Out-File "new.json"

--여기 단순화된 JSON FILE의 예가 있습니다.

{
    "Server1":
    {
        "username":"root",
        "password":"Password&dfdf"
    },
    "Server2":
    {
        "username":"admin",
        "password":"Password&1234"
    }
}

Unescape() 메서드를 사용해 보십시오.

$jsonfile | ConvertTo-Json | % { [System.Text.RegularExpressions.Regex]::Unescape($_) } | Out-File "new.json"

이는 의 자동 문자 이스케이프 기능에 의해 발생합니다.Convertto-Json그리고 그것은 다음과 같은 몇몇 상징들에 영향을 줍니다.<>\'&

ConvertFrom-Json은 이스케이프된 문자를 제대로 읽습니다.예제 사용:

PS C:\> {"Password\u0026123"} | ConvertFrom-Json
Password&123

그리고 당신의 예제 코드는 문자를 이스케이프한 파일을 생성하지만,ConvertFrom-Json원래 암호로 다시 읽을 수 있습니다.아래 참조:

PS C:\> (Get-Content .\example.json -Encoding Ascii) -join "`n" | ConvertFrom-Json
Server1                                  Server2
-------                                  -------
@{username=root; password=Password&dfdf} @{username=admin; password=Password&1234}

PS C:\> (Get-Content .\new.json -Encoding Ascii) -join "`n" | ConvertFrom-Json
Server1                                  Server2
-------                                  -------
@{username=root; password=Password&dfdf} @{username=admin; password=Password&1234}

암호를 이스케이프하지 않고 저장해야 하는 경우에는 좀 더 정교한 작업이 필요할 수 있습니다.유니코드 문자열을 이스케이프된 ASCII 문자열로 변환하는 방법에 대한 이 스레드를 참조하십시오.

또는 가능한 경우 영향을 받는 문자를 피합니다.

PowerShell 7.2로 테스트한 결과 유니코드 및 기타 특수 문자가 성공적으로 변환된 것으로 나타납니다.들여쓰기 또한 개선된 것으로 보입니다.

언급URL : https://stackoverflow.com/questions/29306439/powershell-convertto-json-problem-containing-special-characters

반응형