用另一个替换文本块
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
我正在使用 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