这是JSON的示例数据,其中包含JSON对象的嵌套数组。
def content = """[{
"student" : {
"studentId" : "ABC001",
"studentName" : "TOM"
},
"details" : {
"subjects" : {
"subjectDetails" : [{
"name" : "MATHS",
"rating" : 4
},
{
"name" : "SPANISH",
"rating" : 5
}
]
}
}
},
{
"student" : {
"studentId" : "DEF222",
"studentName" : "RICK"
},
"details" : {
"subjects" : {
"subjectDetails" : null
}
}
},
{
"student" : {
"studentId" : "XYZ444",
"studentName" : "AMY"
},
"details" : {
"subjects" : {
"subjectDetails" : [{
"name" : "MATHS",
"rating" : 6
},
{
"name" : "SPANISH",
"rating" : 7
},
{
"name" : "PHYSICS",
"rating" : 9
}
]
}
}
}]"""
具有包含多个嵌套JSON数组对象的JSON内容,这些对象必须作为子记录分开。 尝试下面的代码,但想知道如果有多个嵌套数组,是否有有效的方法来执行此操作。 我的预期输出如下。
def result = new JsonSlurper().parseText(content)
def header = "type," + result.collect{it.student.keySet()}.unique().flatten().join(",")
println header
def childHeader = {try {
result.details.subjects.subjectDetails.flatten().collect {it.keySet()}.unique().flatten().join(",")
} catch(Exception e) {'exception'}
}
result.collect {
students = it.student
studentsRecord = "Parent," + students.collect { it.value }.join(",")
println studentsRecord
subjects = it.details.subjects.subjectDetails
subjectsRecord = subjects.collect{"Subject-Children," + it.values().join(",")}.join("\n") ?:''
if (subjectsRecord)
println subjectsRecord
}
输出:
type,studentId,studentName
Parent,ABC001,TOM
Subject-Children,MATHS,4
Subject-Children,SPANISH,5
Parent,DEF222,RICK
Parent,XYZ444,AMY
Subject-Children,MATHS,6
Subject-Children,SPANISH,7
Subject-Children,PHYSICS,9
答案 0 :(得分:1)
您可以将其缩减为:
def result = new JsonSlurper().parseText(content)
println "type,${result.student.head().keySet().join(',')}"
result.each { student ->
println "Parent,${student.student.values().join(',')}"
student.details.subjects.subjectDetails.each {
println "Subject-Children,$it.name,$it.rating"
}
}
不确定如何通过
来衡量效率您是否有“多个嵌套数组”的示例?