Groovy Operators

Control Statements

Groovy File Handling

Groovy Error & Exceptions

Groovy Multithreading

Groovy Synchronization

Groovy - JSON Arrays Operations



Groovy provides JsonSlurper to parse JSON string intuitively. When a json array is encountered, it is converted into a groovy List instance automatically. In this chapter, we'll demonstrating various operations on JSON arrays parsed using JsonSlurper.

Accessing JSON Arrays Elements index wise

We can access JSON array elements using 0 based index as shown in example below −

Example.groovy

import groovy.json.JsonSlurper

def jsonArrayText = '''
[
   {  "name": "Julie", "age": 32, "id": 1 },
   {  "name": "Henry", "age": 27, "id": 2 }
]
'''

def slurper = new JsonSlurper()

def employeesList = slurper.parseText(jsonArrayText)

// prints Julie
println employeesList[0].name
// prints 27      
println employeesList[1].age

Output

When we run the above program, we will get the following result.

Julie
27

Iterating JSON Arrays Elements

We can iterate JSON array elements using for, each and eachWithIndex constructs seemslessly as shown in example below −

Example.groovy

import groovy.json.JsonSlurper

def jsonArrayText = '''
[
   {  "name": "Julie", "age": 32, "id": 1 },
   {  "name": "Henry", "age": 27, "id": 2 }
]
'''

def slurper = new JsonSlurper()

def employeesList = slurper.parseText(jsonArrayText)

// iterate list using for loop
for (int i = 0; i < employeesList.size(); i++) {
   println "Employee ${i + 1}: Name - ${employeesList[i].name}, Id - ${employeesList[i].id}"
}

// iterate using each
employeesList.each { employee ->
   println "Name: ${employee.name}, Age: ${employee.age}"
}

// iterate using eachWithIndex
employeesList.eachWithIndex { employee, index ->
   println "Employee #${index}: Name - ${employee.name}, Id - ${employee.id}"
}

Output

When we run the above program, we will get the following result.

Employee 1: Name - Julie, Id - 1
Employee 2: Name - Henry, Id - 2
Name: Julie, Age: 32
Name: Henry, Age: 27
Employee #0: Name - Julie, Id - 1
Employee #1: Name - Henry, Id - 2

Modifying Arrays Elements

JSON Arrays being regular list, can be modified easily as shown in example below −

Example.groovy

import groovy.json.JsonSlurper

def jsonArrayText = '''
[
   {  "name": "Julie", "age": 32, "id": 1 },
   {  "name": "Henry", "age": 27, "id": 2 }
]
'''

def slurper = new JsonSlurper()

def employeesList = slurper.parseText(jsonArrayText)

// add a new Employee
employeesList << ["name": "Adam", "age": 30, "id": 3] 

println employeesList

Output

When we run the above program, we will get the following result.

[[age:32, id:1, name:Julie], [age:27, id:2, name:Henry], [name:Adam, age:30, id:3]]

Filtering and Transforming Arrays Elements

We can filter, map, or find a particular element easily in JSON Arrays as shown in example below −

Example.groovy

import groovy.json.JsonSlurper

def jsonArrayText = '''
[
   {  "name": "Julie", "age": 32, "id": 1 },
   {  "name": "Henry", "age": 27, "id": 2 },
   {  "name": "Adam", "age": 30, "id": 3 },
   {  "name": "Bob", "age": 34, "id": 4}
]
'''

def slurper = new JsonSlurper()

def employeesList = slurper.parseText(jsonArrayText)

// find employees whose age is more than 30
def employees = employeesList.findAll { it.age > 30 }
println "Employees with age more than 30: ${employees}"

// collect names of the employees
def names = employeesList.collect {it.name}
println names

// find employee with id 1
def firstEmployee = employeesList.find { it.id == 1 }
println "First Employee: ${firstEmployee}"

Output

When we run the above program, we will get the following result.

Employees with age more than 30: [[age:32, id:1, name:Julie], [age:34, id:4, name:Bob]]
[Julie, Henry, Adam, Bob]
First Employee: [age:32, id:1, name:Julie]
Advertisements