ForEach Property in #MicrosoftFlow JSON. With XPath? #microblog
/I can't think of a way to do "ForEach Property Of JSON" in MicrosoftFlow or LogicApps - so I came up with this method that involves XPath.
Take example this JSON
{
  "a": 1,
  "b": 2,
  "c": 3
}
  
I want to do ForEach over the properties, so I need a way to convert this into:
[ "a", "b", "c" ]
The usual suspects don't seem to work:
- ForEach (only array)
 - Data Operations - Select (only array)
 - Array (wraps one object into array of one object)
 - CreateArray (wraps multiple objects into array)
 - Split - this could be used, but we'll have a hard time with nested JSON
 
Lets do XPath
XML objects must have one root element. So let's wrap a root around our JSON
{
  "root": {
    "a": 1,
    "b": 2,
    "c": 3
  }
}
  
This next XPath splits each XML element under /root/ into a Nodeset (array of XML elements).
xpath(xml(outputs('Compose_2')), '/root/*')
  
Data Operations - Select
for each XML node, select just the name, map this for each node
xpath(item(), 'name(/*)')
Result
[ "a", "b", "c" ]
I'm sure there'll be a better way one day. But for now this will get me through. I need this to be able to read nested JSON structures as part of my bigger plan.