Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Изменение строк json через конвертацию (http://forum.oszone.net/showthread.php?t=352108)

Njem 12-10-2022 13:37 2994049

Изменение строк json через конвертацию
 
Вложений: 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":  "Перейти на Рабочий стол"
            },

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

Foreigner 12-10-2022 15:09 2994055

Код:

@"
 {
    "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 2994056

Цитата:

Цитата Njem
ConvertTo-Json »

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

Foreigner 12-10-2022 15:20 2994057

Цитата:

Цитата YuS_2
Попробуйте ключ -Compress »

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

Njem 12-10-2022 16:03 2994058

Цитата:

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

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

Цитата:

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

Да, всё верно, ключ -Compress это чтоб всё в одну строчку)

Foreigner 12-10-2022 16:15 2994059

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

Njem 12-10-2022 16:31 2994060

Цитата:

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

YuS_2 12-10-2022 16:32 2994061

Цитата:

Цитата Njem
Но я ж не буду на всех устройствах где будет запускаться скрипт ставить версию поша 7.2.6 »

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

Njem 12-10-2022 16:36 2994062

Цитата:

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

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

Foreigner 12-10-2022 16:52 2994063

Цитата:

Цитата Njem
Прост тогда нужно заняться тем, чтоб это всё обновилось везде »

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

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


Время: 01:03.

Время: 01:03.
© OSzone.net 2001-