Войти

Показать полную графическую версию : [решено] Изменение строк json через конвертацию


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": "Перейти на Рабочий стол"
},

Подскажите, пожалуйста, как решить данную проблему, нагуглил уже всё что можно и ответа, увы не нашёл((

Foreigner
12-10-2022, 15:09
@"
{
"404": {
"Header": "Ошибка",
"Message": "Страница не найдена",
"ToMain": "Перейти на Рабочий стол"
}
"@ -split "`n" -replace '\s{4}|(?<=:)\s+',' ' # т.е. (get-content file.json) -replace '\s{4}|(?<=:)\s+',' ' | set-content file.json

<#

{
"404": {
"Header": "Ошибка",
"Message": "Страница не найдена",
"ToMain": "Перейти на Рабочий стол"
}

#>

YuS_2
12-10-2022, 15:14
ConvertTo-Json »
Попробуйте ключ -Compress
- этот ключ совсем убирает форматирование...
А какой версией powershell пользуетесь?

Foreigner
12-10-2022, 15:20
Попробуйте ключ -Compress »

Это json в одну строку (если не ошибаюсь)

Njem
12-10-2022, 16:03
Попробуйте ключ -Compress
- этот ключ совсем убирает форматирование...
А какой версией powershell пользуетесь?»
Версия powershell = 5.1.22000.832
Судя из того, что я нарыл в интернете пишут, что это как недоработка пробелов, которая была решена в версии 6.0. Попробовал на PowerShell 7.2.6 и там всё идеально отрабатывает, прям как нужно
Но я ж не буду на всех устройствах где будет запускаться скрипт ставить версию поша 7.2.6)

Это json в одну строку (если не ошибаюсь)»
Да, всё верно, ключ -Compress это чтоб всё в одну строчку)

Foreigner
12-10-2022, 16:15
Njem, А какая разница? Им же не любоваться, а где-то использовать. Перфекционизм не имеет границ, но форматирование не влияет на функционал.

Njem
12-10-2022, 16:31
Njem, А какая разница? Им же не любоваться, а где-то использовать. Перфекционизм не имеет границ, но форматирование не влияет на функционал.

Хм.. и ты в итоге считаешь просто юзать версию Powershell 6.0+ где это работает корректно? Никаких обходных путей не найти?(
По дефолту то везде 5.1 стоит обычно всегда) (ну если ОС плюс/минус современная вин10, вин11, ВинСерв2016+)

YuS_2
12-10-2022, 16:32
Но я ж не буду на всех устройствах где будет запускаться скрипт ставить версию поша 7.2.6 »
А что мешает? Дело в том, что версия 5.1 - вещь ныне, статичная, изменений не предвидится, поэтому если есть желание получить инструмент с исправлениями ошибок и другими плюшками, то придется переходить на новые версии... так или иначе...

Njem
12-10-2022, 16:36
А что мешает? Дело в том, что версия 5.1 - вещь ныне, статичная, изменений не предвидится, поэтому если есть желание получить инструмент с исправлениями ошибок и другими плюшками, то придется переходить на новые версии... так или иначе...


Ну в целом то да, ты прав...) Прост тогда нужно заняться тем, чтоб это всё обновилось везде) Но я понял Вас, спасибо за информацию)) :up

Foreigner
12-10-2022, 16:52
Прост тогда нужно заняться тем, чтоб это всё обновилось везде »

PowerShell распостраняется в том числе, как архив. Попробуйте просто запустить с флешки, я сам не пробовал, но что мешает?

https://github.com/PowerShell/PowerShell/releases




© OSzone.net 2001-2012