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]