regex - Use -match on JSON document to return different result if true -


what best way of returning first found value in servers|addresses|addr if $json -match returns true, relative scope in specified -match value found?

for example, $json variable below:

if $json -match "aboubacar" returns true, $result = "143.179.56.126" if $json -match "tendaji" returns true, $result = "113.55.212.113" 

i'd accomplish in powershell version 2.

$json=' {     "servers": [         {             "addresses": {                 "": [                     {                         "addr": "113.55.212.113",                         "os-ext-ips-mac:mac_addr": "aa:bb:cc:dd:ee:ff",                         "os-ext-ips:type": "fixed",                         "version": 4                     }                 ]             },             "created": "2013-08-15t12:04:04z",             "flavor": {                 "id": "1",                 "links": [                     {                         "href": "http://openstack.example.com/flavors/1",                         "rel": "bookmark"                     }                 ]             },             "hostid": "117535ce0eda7ee02ebffe2c976173629385481ae3f2bded5e14a66b",             "id": "ae114799-9164-48f5-a036-6ef9310acbc4",             "image": {                 "id": "70a599e0-31e7-49b7-b260-868f441e862b",                 "links": [                     {                         "href": "http://openstack.example.com/images/70a599e0-31e7-49b7-b260-868f441e862b",                         "rel": "bookmark"                     }                 ]             },             "key_name": null,             "links": [                 {                     "href": "http://openstack.example.com/v2.1/servers/ae114799-9164-48f5-a036-6ef9310acbc4",                     "rel": "self"                 },                 {                     "href": "http://openstack.example.com/servers/ae114799-9164-48f5-a036-6ef9310acbc4",                     "rel": "bookmark"                 }             ],             "metadata": {                 "my server name": "tendaji"             },             "name": "tendaji"         },         {             "addresses": {                 "": [                     {                         "addr": "143.179.56.126",                         "os-ext-ips-mac:mac_addr": "aa:bb:cc:dd:ee:ff",                         "os-ext-ips:type": "fixed",                         "version": 4                     }                 ]             },             "created": "2013-08-15t12:04:04z",             "flavor": {                 "id": "1",                 "links": [                     {                         "href": "http://openstack.example.com/flavors/1",                         "rel": "bookmark"                     }                 ]             },             "hostid": "117535ce0eda7ee02ebffe2c976173629385481ae3f2bded5e14a66b",             "id": "ae114799-9164-48f5-a036-6ef9310acbc4",             "image": {                 "id": "70a599e0-31e7-49b7-b260-868f441e862b",                 "links": [                     {                         "href": "http://openstack.example.com/images/70a599e0-31e7-49b7-b260-868f441e862b",                         "rel": "bookmark"                     }                 ]             },             "key_name": null,             "links": [                 {                     "href": "http://openstack.example.com/v2.1/servers/ae114799-9164-48f5-a036-6ef9310acbc4",                     "rel": "self"                 },                 {                     "href": "http://openstack.example.com/servers/ae114799-9164-48f5-a036-6ef9310acbc4",                     "rel": "bookmark"                 }             ],             "metadata": {                 "my server name": "aboubacar"             },             "name": "aboubacar"         }     ] }'  $json -match "aboubacar"  # if true return true, $result = "143.179.56.126" seen in `servers|addresses|addr` $json -match "tendaji" # true, $result = "113.55.212.113" seen in `servers|addresses|addr` 

the easiest way convert json string object , use simple object selection function in powershell. however, approach requires non-blank property name under 'adresses'.

something so:

$json=' {     "servers": [         {             "addresses": {                 "addr": [                     {                         "addr": "113.55.212.113",                         "os-ext-ips-mac:mac_addr": "aa:bb:cc:dd:ee:ff",                         "os-ext-ips:type": "fixed",                         "version": 4                     }                 ]             },             "created": "2013-08-15t12:04:04z",             "flavor": {                 "id": "1",                 "links": [                     {                         "href": "http://openstack.example.com/flavors/1",                         "rel": "bookmark"                     }                 ]             },             "hostid": "117535ce0eda7ee02ebffe2c976173629385481ae3f2bded5e14a66b",             "id": "ae114799-9164-48f5-a036-6ef9310acbc4",             "image": {                 "id": "70a599e0-31e7-49b7-b260-868f441e862b",                 "links": [                     {                         "href": "http://openstack.example.com/images/70a599e0-31e7-49b7-b260-868f441e862b",                         "rel": "bookmark"                     }                 ]             },             "key_name": null,             "links": [                 {                     "href": "http://openstack.example.com/v2.1/servers/ae114799-9164-48f5-a036-6ef9310acbc4",                     "rel": "self"                 },                 {                     "href": "http://openstack.example.com/servers/ae114799-9164-48f5-a036-6ef9310acbc4",                     "rel": "bookmark"                 }             ],             "metadata": {                 "my server name": "tendaji"             },             "name": "tendaji"         },         {             "addresses": {                 "addr": [                     {                         "addr": "143.179.56.126",                         "os-ext-ips-mac:mac_addr": "aa:bb:cc:dd:ee:ff",                         "os-ext-ips:type": "fixed",                         "version": 4                     }                 ]             },             "created": "2013-08-15t12:04:04z",             "flavor": {                 "id": "1",                 "links": [                     {                         "href": "http://openstack.example.com/flavors/1",                         "rel": "bookmark"                     }                 ]             },             "hostid": "117535ce0eda7ee02ebffe2c976173629385481ae3f2bded5e14a66b",             "id": "ae114799-9164-48f5-a036-6ef9310acbc4",             "image": {                 "id": "70a599e0-31e7-49b7-b260-868f441e862b",                 "links": [                     {                         "href": "http://openstack.example.com/images/70a599e0-31e7-49b7-b260-868f441e862b",                         "rel": "bookmark"                     }                 ]             },             "key_name": null,             "links": [                 {                     "href": "http://openstack.example.com/v2.1/servers/ae114799-9164-48f5-a036-6ef9310acbc4",                     "rel": "self"                 },                 {                     "href": "http://openstack.example.com/servers/ae114799-9164-48f5-a036-6ef9310acbc4",                     "rel": "bookmark"                 }             ],             "metadata": {                 "my server name": "aboubacar"             },             "name": "aboubacar"         }     ] }'  [system.reflection.assembly]::loadwithpartialname("system.web.extensions") $ser = new-object system.web.script.serialization.javascriptserializer $jsonobj = $ser.deserializeobject($json)  $jsonobj.servers | where-object {$_.name -eq 'tendaji'} | `   select-object { $_.addresses.addr[0].addr }  $jsonobj.servers | where-object {$_.name -eq 'aboubacar'} | `   select-object { $_.addresses.addr[0].addr } 

Comments