Forum Discussion

mpw83's avatar
mpw83
Contributor
6 years ago

Get the id of a parent element by a sub-child value of Json response using groovy

I have following groovy script to get the values from response text. 

import com.eviware.soapui.support.XmlHolder
import groovy.json.JsonSlurper 

def response = context.expand( '${GetLoansList#Response}' ).toString()
log.info(response)

def slurper = new JsonSlurper()
def json = slurper.parseText response

log.info(json.items.id)

my json is similar to this 

{
   "items" : [
      {
         "id" : 48223,
         "name" : "LAI-00151007",
         "amount" : 25050.0,
         "interest_rate" : 25.99,
         "term" : 60,
      },
      {
         "id" : 48262,
         "name" : "LAI-00152581",
         "amount" : 44225.0,
         "interest_rate" : 18.9,
         "term" : 36,
      },
   ],
   "total_count" : 13
}

I want to get the corresponding ID for the given name ("name": "LAI-00152581",). What is the best way to do this? Thanks 




  • mpw83  - This is how you can go with it :-

     

    import groovy.json.JsonSlurper
    
    def json = '''{
       "items" : [
          {
             "id" : "48223",
             "name" : "LAI-00151007",
             "amount" : "25050.0",
             "interest_rate" : "25.99",
             "term" : "60",
          },
          {
             "id" : "48262",
             "name" : "LAI-00152581",
             "amount" : "44225.0",
             "interest_rate" : "18.9",
             "term" : "36",
          }
       ],
       "total_count" : "13"
    }'''
    
    def jsonSlurper = new JsonSlurper()
    def obj = jsonSlurper.parseText(json)
    
    obj.items.each{
    	if(it.name == 'LAI-00152581'){
    		log.info it.id
    	}
    }
    

    nmrao  - You can also suggest better code.

  • avidCoder's avatar
    avidCoder
    Super Contributor

    mpw83  - This is how you can go with it :-

     

    import groovy.json.JsonSlurper
    
    def json = '''{
       "items" : [
          {
             "id" : "48223",
             "name" : "LAI-00151007",
             "amount" : "25050.0",
             "interest_rate" : "25.99",
             "term" : "60",
          },
          {
             "id" : "48262",
             "name" : "LAI-00152581",
             "amount" : "44225.0",
             "interest_rate" : "18.9",
             "term" : "36",
          }
       ],
       "total_count" : "13"
    }'''
    
    def jsonSlurper = new JsonSlurper()
    def obj = jsonSlurper.parseText(json)
    
    obj.items.each{
    	if(it.name == 'LAI-00152581'){
    		log.info it.id
    	}
    }
    

    nmrao  - You can also suggest better code.

    • nmrao's avatar
      nmrao
      Champion Level 3

      Thats ok avidCoder .  It takes time to optimize. But,yes can simplifed as below entire script:

       

      def json = new groovy.json.JsonSlurper().parseText(context.expand( '${GetLoansList#Response}' ))
      log.info json.items.find{it.name = 'LAI-00152581'}.id
    • nmrao's avatar
      nmrao
      Champion Level 3

      Thats ok avidCoder .  It takes time to get into optimization. But,yes it can simplifed as below entire script:

       

      def json = new groovy.json.JsonSlurper().parseText(context.expand( '${GetLoansList#Response}' ))
      log.info json.items.find{it.name = 'LAI-00152581'}.id