用另一个替换文本块

Replace block of text with another one

我正在使用 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 选项尝试了一些东西,但不是很有结论。

也尝试过使用一些正则表达式,但我对此非常吃力。

看起来提供的 json 已从 psobject 转换为深度为 2 的 json。此代码会将其放回对象并将哈希表解析为连接对象 属性,然后将其转换回深度为 3 的 json,这应该可以得到您要查找的内容

$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 '(?<=[=])([^;}]*)(?=[;}])', "'`'"))
}

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

$newjson