[
{
"Organization": "Global",
"Roles": [
{
"Role_Name": "Talent Partner"
},
{
"Role_Name": "Partner"
}
]
},
{
"Organization": "Mfg",
"Roles": [
{
"Role_Name": "Talent Partner"
}
]
}
]
OUTPUT:
[
{
"Organization": "Global",
"Talent Partner": "1",
"Partner": "1"
},
{
"Organization": "Mfg",
"Talent Partner": "1"
}
]
Groovy:
def slurper = new JsonSlurper();
def jsonDoc = slurper.parseText(doc);
List<String> EntryList = new ArrayList<String>();
def NoOfTP = 0;
def Roles =jsonDoc.Roles;
def NumberOfElements = Roles.size();
for( int p = 0; p < NumberOfElements; p++ ) {
if (Roles.Role_Name[p].trim()).toUpperCase() == 'Talent Partner').toUpperCase() )
{
NoOfTP = NoOfTP + 1;}
EntryList.add(Roles.Role_Name[p]);}
props.setProperty("document.dynamic.userdefined.NoOfTP", NoOfTP.toString());}
is = new ByteArrayInputStream(JsonOutput.toJson(jsonDoc).getBytes());
dataContext.storeStream(is, props);}
How to count the occourence of the role_name within roles
Something like:
import groovy.json.*
def txt = '[ { "Organization": "Global", "Roles": [ { "Role_Name": "Talent Partner" }, { "Role_Name": "Partner" } ] }, { "Organization": "Mfg", "Roles": [ { "Role_Name": "Talent Partner" } ] } ]'
def json = new JsonSlurper().parseText txt
def res = json.collect{ curr ->
def elem = [ Organization:curr.Organization ].withDefault{ 0 }
curr.Roles*.each{ elem[ it.value ]++ }
elem
}
assert res.toString() == '[[Organization:Global, Talent Partner:1, Partner:1], [Organization:Mfg, Talent Partner:1]]'