Groovy - 处理 JSON 数组
数组处理是任何编程语言中非常常见的方面。在 Groovy 中,我们可以轻松处理 JSON 数组,因为在使用 JsonSlurper 时,JSON 数组会自动转换为 Groovy 的 List 实例。本章中,我们将演示使用 JsonSlurper 和 JsonBuilder 处理 JSON 数组的各种场景。
使用 JsonSlurper 解析 JSON 数组
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)
// 打印 Java.util.ArrayList
println employeesList.getClass().name
// 打印列表
println employeesList
输出
运行上述程序时,我们将得到以下结果。
java.util.ArrayList [[age:32, id:1, name:Julie], [age:27, id:2, name:Henry]]
这里可以看到,JSON 数组被转换为 List,对象被转换为 Map。
使用 JsonSlurper 解析嵌套 JSON 数组
我们也可以解析嵌套的 JSON 数组。JsonSlurper 会自动将它们转换为嵌套列表,如下所示 −
Example.groovy
import groovy.json.JsonSlurper
def nestedArrayJsonString = '''
{
"items": [
[1, 2, 3],
["apple", "banana", "cherry"],
[true, false]
]
}
'''
def jsonSlurper = new JsonSlurper()
def nestedData = jsonSlurper.parseText(nestedArrayJsonString)
// 打印 2
println nestedData.items[0][1]
// 打印 apple,banana,cherry
println nestedData.items[1].join(',')
输出
运行上述程序时,我们将得到以下结果。
2 apple,banana,cherry
使用 JsonBuilder 创建 JSON 数组
我们可以通过将 Groovy List 赋值给 JsonBuilder 的 content 属性来创建根级别的 JSON 数组。
Example.groovy
import groovy.json.JsonBuilder import groovy.json.JsonOutput def employees = [ [ name: 'Julie', age: 32, id: 1 ], [ name: 'Henry', age: 27, id: 2 ] ] def builder = new JsonBuilder() builder.content = employees def jsonOutput = JsonOutput.prettyPrint(builder.toString()) println jsonOutput
输出
运行上述程序时,我们将得到以下结果。
[
{
"name": "Julie",
"age": 32,
"id": 1
},
{
"name": "Henry",
"age": 27,
"id": 2
}
]
或者,我们也可以如以下所示,将 JSON 数组传递给 JsonBuilder 的构造函数 −
Example.groovy
import groovy.json.JsonBuilder import groovy.json.JsonOutput def employees = [ [ name: 'Julie', age: 32, id: 1 ], [ name: 'Henry', age: 27, id: 2 ] ] def builder = new JsonBuilder(employees) def jsonOutput = JsonOutput.prettyPrint(builder.toString()) println jsonOutput
输出
运行上述程序时,我们将得到以下结果。
[
{
"name": "Julie",
"age": 32,
"id": 1
},
{
"name": "Henry",
"age": 27,
"id": 2
}
]