Roger Chen
Roger Chen

Reputation: 303

how to add quotes in this string

I have this string

[{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}]

i'm wondering how can I write a function to convert it to

[{"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"}]

I have tried to use insert and indexof , but couldn't figure out how to do for an entire string

Upvotes: 1

Views: 349

Answers (2)

Roger Chen
Roger Chen

Reputation: 303

eventually hacked it by using replace

$proxyinfosjson = $proxyinfosjson.Replace(',', '","').Replace('{', '{"').Replace('}', '"}').replace(':', '":"').Replace('}"', '}').Replace('"{', '{')

so ugly.. not proud of it.. but works..

Upvotes: 0

mklement0
mklement0

Reputation: 440586

If you really have to work with this format and cannot produce well-formed JSON to begin with, at least in your sample input both the property names and values are composed only of characters that are either . or fall into the \w regex category, so a single -replace operation is possible:

@'
[{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.]+', '"$&"'

The result is well-formed JSON, which you can pipe to ConvertFrom-Json for OO processing in PowerShell.


If you can only assume that the property names are composed of only \w characters:

@'
[{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 '\}|(?<!\}),', '"$&'

Upvotes: 3

Related Questions