我有这根绳子
[{listenport:443,connectaddress:10.1.10.20,connectport:443,firewallrulename:port443,direction:Inbound,action:Allow,protocol:TCP},{listenport:80,connectaddress:10.1.10.20,connectport:80,firewallrulename:port80,direction:Inbound,action:Allow,protocol:TCP}]我在想怎么写一个函数来把它转换成
[{"listenport":"443","connectaddress":"10.1.10.20","connectport":"443","firewallrulename":"port443","direction":"Inbound","action":"Allow","protocol":"TCP"},{"listenport":"80","connectaddress":"10.1.10.20","connectport":"80","firewallrulename":"port80","direction":"Inbound","action":"Allow","protocol":"TCP"}]我试过使用insert和indexof,但不知道如何处理整个字符串
发布于 2022-03-02 22:48:56
如果您确实必须使用这种格式,并且开始时无法生成格式良好的JSON,那么至少在示例输入中,属性名和值都只由属于.或属于\w regex类别的字符组成,因此可以只执行一个-replace操作:
@'
[{listenport:443,connectaddress:10.1.10.20,connectport:443,firewallrulename:port443,direction:Inbound,action:Allow,protocol:TCP},{listenport:80,connectaddress:10.1.10.20,connectport:80,firewallrulename:port80,direction:Inbound,action:Allow,protocol:TCP}]
'@ -replace '[\w.]+', '"$&"'结果是格式良好的JSON,您可以将其输送到ConvertFrom-Json,以便在PowerShell中进行OO处理。
如果只能假设属性名称仅由\w字符组成:
@'
[{listenport:443,connectaddress:10.1.10.20,connectport:443,firewallrulename:port443,direction:Inbound,action:Allow,protocol:TCP},{listenport:80,connectaddress:10.1.10.20,connectport:80,firewallrulename:port80,direction:Inbound,action:Allow,protocol:TCP}]
'@ -replace '(\w+):', '"$1":"' -replace '\}|(?<!\}),', '"$&'发布于 2022-03-03 05:22:48
最终通过使用
$proxyinfosjson = $proxyinfosjson.Replace(',', '","').Replace('{', '{"').Replace('}', '"}').replace(':', '":"').Replace('}"', '}').Replace('"{', '{')好丑..。不为之骄傲..。但是有效..。
https://stackoverflow.com/questions/71329876
复制相似问题