Search code examples
groovy

How to find elements and count in JSON array using groovy


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


Solution

  • 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]]'