How to access and loop though nested Json in Groovy

60 views Asked by At

I am trying to access and loop a nested Json in Groovy for testing purpose, the file saved in a file below is how the structure is

{
  "dunsNumber": 0,
  "branches": 25,
  "url": "www.nbch.com.com",
  "address": {
    "continentId": 5,
    "continentName": "South & Central America",
    "countryId": 20,
    "countryName": "Brasil"
  },
  "parentOrganizations": [
    {
      "parentType": "IMMEDIATE",
      "name": "abcde",
      "dunsNumber": "12345",
      "address": {
        "continentId": 5,
        "continentName": "Europe",
        "countryId": 33,
        "countryName": "France"
      }
  ]
}

All I need is to put new value for the key continentName and coutryName from the node and parentOrganizations.address

"address": {
        "continentId": 5,
        "continentName": "South & Central America",
        "countryId": 33,
        "countryName": "Argentina",

Below is my way

def raw = loadResourceContent("createOrganization1.json") --> loading the Json file
def body = new JSONObject(raw)
                .put("dunsNumber", dunsNumberUnique) //--> I I am using a unique value 
                 .put("name",organizatioNameUnique) //--> random Organization name
                 .put("countryName","Argentina") //--> Here It would add new entry in the parent Node.
                 .toString()

Thanks for your help and btw I am new in groovy and testing.

1

There are 1 answers

1
kriegaex On BEST ANSWER

Maybe you want to read the Groovy manual about how to process JSON:

https://groovy-lang.org/processing-json.html

You could do something like this:

package de.scrum_master.stackoverflow.q75817755

import groovy.json.JsonOutput
import groovy.json.JsonSlurper

def json = '''{
  "dunsNumber": 0,
  "branches": 25,
  "url": "www.nbch.com.com",
  "address": {
    "continentId": 5,
    "continentName": "South & Central America",
    "countryId": 20,
    "countryName": "Brasil"
  },
  "parentOrganizations": [
    {
      "parentType": "IMMEDIATE",
      "name": "abcde",
      "dunsNumber": "12345",
      "address": {
        "continentId": 5,
        "continentName": "Europe",
        "countryId": 33,
        "countryName": "France"
      }
    }
  ]
}'''

Map parsed = new JsonSlurper().parseText(json)
parsed.parentOrganizations[0].tap {
  dunsNumber = 424242
  name = "ACME Inc."
  address.continentName = "South & Central America"
  address.countryName = "Argentina"
}
println JsonOutput.prettyPrint(JsonOutput.toJson(parsed))

The console log says:

{
    "dunsNumber": 0,
    "branches": 25,
    "url": "www.nbch.com.com",
    "address": {
        "continentId": 5,
        "continentName": "South & Central America",
        "countryId": 20,
        "countryName": "Brasil"
    },
    "parentOrganizations": [
        {
            "parentType": "IMMEDIATE",
            "name": "ACME Inc.",
            "dunsNumber": 424242,
            "address": {
                "continentId": 5,
                "continentName": "South & Central America",
                "countryId": 33,
                "countryName": "Argentina"
            }
        }
    ]
}

Is this what you had in mind?