Njem
12-10-2022, 13:37
Добрый день всем!
У меня есть задача изменить определённые строки в json. Выполняю данную задачу через Powershell.
Есть код, который спокойно это выполняет (кусок из кода, пример):
$text = "C:\temp\ru-RU.json"
$json = (Get-Content -raw $text -Encoding UTF8 | ConvertFrom-Json)
$json.Base.NavMenu.Issues = "Архив вопросов"
$json.Issue.StatusAction.8 = "Закрыт (Рассматривался)"
$json | ConvertTo-Json -Depth 10 | Set-Content $text
Однако, существует проблема при обратной конвертации из объекта в сам json.
Изначальный json файл имеет два пробела в табуляции, когда я прохожусь скриптом он эти два пробела преобразовывает в дефольтне четыре пробела.
Данную проблему смог решить другим кодом:
($json -split '\r\n' |
ForEach-Object {
$line = $_
if ($_ -match '^ +') {
$len = $Matches[0].Length / 2
$line = ' ' * $len + $line.TrimStart()
}
$line
}) -join "`r`n"
Но, полноценно решить проблему с табуляцией не могу, так как помимо двух пробелов в табах, все строки в json смещаются в соотвествии с пробелами (то есть было два таба, это четыре пробела, сместилось ровно в два раза с табами)
Пример изначального вида json:
{
"404": {
"Header": "Ошибка",
"Message": "Страница не найдена",
"ToMain": "Перейти на Рабочий стол"
},
После преобразования выходит вот такой json:
{
"404": {
"Header": "Ошибка",
"Message": "Страница не найдена",
"ToMain": "Перейти на Рабочий стол"
},
Подскажите, пожалуйста, как решить данную проблему, нагуглил уже всё что можно и ответа, увы не нашёл((
У меня есть задача изменить определённые строки в json. Выполняю данную задачу через Powershell.
Есть код, который спокойно это выполняет (кусок из кода, пример):
$text = "C:\temp\ru-RU.json"
$json = (Get-Content -raw $text -Encoding UTF8 | ConvertFrom-Json)
$json.Base.NavMenu.Issues = "Архив вопросов"
$json.Issue.StatusAction.8 = "Закрыт (Рассматривался)"
$json | ConvertTo-Json -Depth 10 | Set-Content $text
Однако, существует проблема при обратной конвертации из объекта в сам json.
Изначальный json файл имеет два пробела в табуляции, когда я прохожусь скриптом он эти два пробела преобразовывает в дефольтне четыре пробела.
Данную проблему смог решить другим кодом:
($json -split '\r\n' |
ForEach-Object {
$line = $_
if ($_ -match '^ +') {
$len = $Matches[0].Length / 2
$line = ' ' * $len + $line.TrimStart()
}
$line
}) -join "`r`n"
Но, полноценно решить проблему с табуляцией не могу, так как помимо двух пробелов в табах, все строки в json смещаются в соотвествии с пробелами (то есть было два таба, это четыре пробела, сместилось ровно в два раза с табами)
Пример изначального вида json:
{
"404": {
"Header": "Ошибка",
"Message": "Страница не найдена",
"ToMain": "Перейти на Рабочий стол"
},
После преобразования выходит вот такой json:
{
"404": {
"Header": "Ошибка",
"Message": "Страница не найдена",
"ToMain": "Перейти на Рабочий стол"
},
Подскажите, пожалуйста, как решить данную проблему, нагуглил уже всё что можно и ответа, увы не нашёл((