Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Изменение строк json через конвертацию

Ответить
Настройки темы
PowerShell - [решено] Изменение строк json через конвертацию

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png NewJson.png
(12.0 Kb, 2 просмотров)
Тип файла: png OldJson.png
(10.9 Kb, 2 просмотров)
Добрый день всем!

У меня есть задача изменить определённые строки в 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":  "Перейти на Рабочий стол"
            },
Подскажите, пожалуйста, как решить данную проблему, нагуглил уже всё что можно и ответа, увы не нашёл((

Отправлено: 13:37, 12-10-2022

 

Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Код: Выделить весь код
 @"
 {
     "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": "Перейти на Рабочий стол"
   }

#>

Последний раз редактировалось Foreigner, 12-10-2022 в 15:18.


Отправлено: 15:09, 12-10-2022 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1176
Благодарности: 493

Профиль | Отправить PM | Цитировать


Цитата Njem:
ConvertTo-Json »
Попробуйте ключ -Compress
- этот ключ совсем убирает форматирование...
А какой версией powershell пользуетесь?

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 12-10-2022 в 15:22.


Отправлено: 15:14, 12-10-2022 | #3


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата YuS_2:
Попробуйте ключ -Compress »
Это json в одну строку (если не ошибаюсь)

Отправлено: 15:20, 12-10-2022 | #4


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 16:03, 12-10-2022 | #5


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Njem, А какая разница? Им же не любоваться, а где-то использовать. Перфекционизм не имеет границ, но форматирование не влияет на функционал.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:15, 12-10-2022 | #6


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:31, 12-10-2022 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1176
Благодарности: 493

Профиль | Отправить PM | Цитировать


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

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:32, 12-10-2022 | #8


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
А что мешает? Дело в том, что версия 5.1 - вещь ныне, статичная, изменений не предвидится, поэтому если есть желание получить инструмент с исправлениями ошибок и другими плюшками, то придется переходить на новые версии... так или иначе...
Ну в целом то да, ты прав...) Прост тогда нужно заняться тем, чтоб это всё обновилось везде) Но я понял Вас, спасибо за информацию))

Отправлено: 16:36, 12-10-2022 | #9


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата Njem:
Прост тогда нужно заняться тем, чтоб это всё обновилось везде »
PowerShell распостраняется в том числе, как архив. Попробуйте просто запустить с флешки, я сам не пробовал, но что мешает?

https://github.com/PowerShell/PowerShell/releases
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:52, 12-10-2022 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Изменение строк json через конвертацию

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Изменение метода поиска строк в конфиге Stalker_AleX333 Скриптовые языки администрирования Windows 6 21-07-2019 15:42
CMD/BAT - Изменение строк в файле Nikugorsk Скриптовые языки администрирования Windows 13 08-06-2018 18:32
Любой язык - JSON: settings.json в Visual Studio Code прокси jkadaba Скриптовые языки администрирования Windows 0 14-04-2017 08:10
Как ускорить конвертацию файлов? man1 Видео и аудио: обработка и кодирование 12 26-07-2013 09:16
Изменение порядка строк MySQL ilan Вебмастеру 5 22-07-2003 11:05




 
Переход