Заменить блок текста другим - PullRequest
0 голосов
/ 01 февраля 2019

Я собираю данные в необработанном тексте с помощью RESTAPI из устройства, и я хотел бы заменить определенный блок текста из него.

Мне не очень комфортно с типами, и я застрял наэто с часов.

Допустим, вот мой оригинальный текст:

{
"type":  "V9",
"firmware":  {
                 "manageFirmware":  false,
                 "reapplyState":  "NotApplying"
             },
"inProgress":  false,
"connectionSettings":  {
                           "reapplyState":  "NotApplying",
                           "connections":  [
                                               "@{id=1; name=PR_1; state=Deployed; status=OK}",
                                               "@{id=2; name=PR_2; state=Deployed; status=OK}",
                                               "@{id=3; name=SN_1; state=Reserved; status=Unknown;}",
                                               "@{id=4; name=SN_2; state=Reserved; status=Unknown;}"   
                                           ]
                       },
"Tag":  "123456"}

Я хотел бы заменить блок после "connections" ::

[ "@{id=1; name=PR_1; state=Deployed; status=OK}",
  "@{id=2; name=PR_2; state=Deployed; status=OK}",
  "@{id=3; name=SN_1; state=Reserved; status=Unknown;}",
  "@{id=4; name=SN_2; state=Reserved; status=Unknown;}"
]

другимтекстовый блок, который я сейчас могу собрать, скажем так:

[
{
    "id":  1,
    "name":  "PR_1",
    "state":  "Deployed",
    "status":  "OK",
},
{
    "id":  2,
    "name":  "PR_2",
    "state":  "Deployed",
    "status":  "OK",
},
{
    "id":  3,
    "name":  "SN_1",
    "state":  "Reserved",
    "status":  "Unknown",
},
{
    "id":  4,
    "name":  "SN_2",
    "state":  "Reserved",
    "status":  "Unknown",
}
]

Цель для меня - удалить "@, заменить = на : и удалить }в конце строки.

Я уже пробовал что-то с опцией -Replace, но это не очень завершает.

Также пробовал с некоторым Regex, но я очень борюсь за это.

1 Ответ

0 голосов
/ 01 февраля 2019

похоже, что предоставленный json был преобразован из psobject в json с глубиной 2. Этот код вернет его обратно в объект и проанализирует хеш-таблицы в объекты для свойства подключения, а затем преобразует его обратно в json с глубиной.из 3, который должен получить то, что вы ищете

$json = @'
{
"type":  "V9",
"firmware":  {
                 "manageFirmware":  false,
                 "reapplyState":  "NotApplying"
             },
"inProgress":  false,
"connectionSettings":  {
                           "reapplyState":  "NotApplying",
                           "connections":  [
                                               "@{id=1; name=PR_1; state=Deployed; status=OK}",
                                               "@{id=2; name=PR_2; state=Deployed; status=OK}",
                                               "@{id=3; name=SN_1; state=Reserved; status=Unknown;}",
                                               "@{id=4; name=SN_2; state=Reserved; status=Unknown;}"   
                                           ]
                       },
"Tag":  "123456"}
'@

$obj = $json | ConvertFrom-Json

$obj.connectionSettings.connections = $obj.connectionSettings.connections | % {
    [pscustomobject](iex ($_ -replace '(?<=[=])([^;}]*)(?=[;}])', "'`$1'"))
}

$newjson = $obj | ConvertTo-Json -Depth 3

$newjson
...