Powershell по умолчанию довольно печатает любой JSON, который он производит.
Таким образом, правильный способ сделать симпатичную печать состоит в том, чтобы проанализировать строку JSON в объект и немедленно преобразовать ее обратно в строку JSON.
$json = '{ "persistentdataapi": "https://somevalue.azurewebsites.net/", "collectioncountapi": "https://anothervalue.azurewebsites.net/", "eventserviceapi": "https://thirdvalue.azurewebsites.net/", "securityserviceapi": "https://fourthvalue.azurewebsites.net/" }'
$json | ConvertFrom-Json | ConvertTo-Json
производит
{
"persistentdataapi": "https://somevalue.azurewebsites.net/",
"collectioncountapi": "https://anothervalue.azurewebsites.net/",
"eventserviceapi": "https://thirdvalue.azurewebsites.net/",
"securityserviceapi": "https://fourthvalue.azurewebsites.net/"
}
или в вашем случае
$file = "$env:WORKSPACE\portal\var.Portal.Web\dataapi.json"
$raw.Value | ConvertFrom-Json | ConvertTo-Json | Out-File $file -Encoding UTF8
В качестве побочного эффекта это также гарантирует, что JSON в файле действителен, потому что в противном случае ConvertFrom-Json
выдаст ошибку.
Пожалуйста, всегда явно указывайте кодировку UTF8 при чтении и записи файлов JSON.
$data = Get-Content $file -Encoding UTF8 | ConvertFrom-Json
$data | ConvertTo-Json | Set-Content $file -Encoding UTF8
Причина этого
- Согласно общепринятому соглашению, файлы JSON должны иметь формат UTF8.
- Если не указано иное,
Get-Content
и Set-Content
будут использовать кодировку системы по умолчанию для чтения / записи текстовых файлов.
- Системное значение по умолчанию очень редко - UTF-8, в большинстве случаев это будет устаревшая однобайтовая кодировка, такая как Windows-1252.
- Это создает риск
- искажение символов Юникода, допустимых в JSON, при чтении файла JSON.
- создание файлов JSON, отличных от UTF-8, что затрудняет их использование другими пользователями.
Фактически, всегда указывайте кодировку явно при работе с текстовыми файлами, а не только в случае JSON.