如何解析具有相同父元素名称的 json 数据行(通过 Groovy 脚本)?
How do I parse rows of json data (via a Groovy script) with identical parent element names?
我正在编写一个 Groovy 脚本来解析以下 json 字符串。我是 Groovy 和 Java 的新手,所以如果我遗漏了一些明显的东西,那么我会预先感谢您的耐心等待。
[
{
"forms": [
{
"form1": {
"title": "Form 1 Title",
"data": {}
}
},
{
"form2": {
"title": "Form 2 Title",
"data": {}
}
},
{
"form2": {
"title": "Form 2 Title",
"data": {
"gridData": {
"id": 1,
"fullGridId": "1",
"columns": {
"col1": "Cust Name",
"col2": "Cust Number",
"col3": "Cust Email"
},
"rowset": [
{
"col1": "Jane Eyre",
"col2": 11111,
"col3": "jane.eyre@gmail.com"
},
{
"col1": "Jack Russell",
"col2": 22222,
"col3": "jack.russell@mail.com"
},
{
"col1": "Abraham Lincoln",
"col2": 33333,
"col3": "POTUS16@wh.gov"
},
{
"col1": "Muhammad Ali",
"col2": 44444,
"col3": "theGreatest@gmail.com"
}
],
"summary": {
"records": 4
}
}
}
}
},
{
"form3": {
"title": "Form 3 Title",
"data": {}
}
}
]
}
]
我需要通读“form2”中的所有客户信息(“客户名称”、“客户编号”和“客户电子邮件”)。我认为我遇到的问题是父元素“form2”在此 json 中出现了两次。第一次出现没有数据,但我需要的数据在第二次出现。这是我阅读上面 json 的代码的摘录。变量“formData”是一个包含上述 json 字符串的字符串。
def jsonData = new JsonSlurper().parseText(formData);
def form2Rowset = jsonData.forms.form2.data.gridData.rowset;
for(i=0,i<rowset.size(),i++)
{
rowset[i].get("col1") ....do something
rowset[i].get("col2") ....do something
rowset[i].get("col3") ....do something
}
return;
我认为问题是“form2”在 json 字符串中出现了两次,但我不确定如何处理它。我正在寻找不需要 downloading/importing 任何附加包(如果可能?)的解决方案 - 我已经有了 JsonSlurper。如果您有想法,请描述具体代码,因为我是新手,没有具体代码可能无法跟踪概念。根据我的情况调整你的代码建议我不会有任何问题,但具体的代码将是最有帮助的....并且不胜感激!!
请注意,在 json 中,您有数组 [...]
和映射 {...}
def jsonData = new groovy.json.JsonSlurper().parseText(formData)
jsonData.each{root->
root.forms.each{form->
form.each{formKey,formValue->
formValue.data?.gridData?.rowset?.each{row->
row.col1 = row.col1.toUpperCase()
println "${formKey} title:: ${formValue.title} row:: ${row}"
}
}
}
}
相同,但有一个嵌套 each
替换为经典 for
jsonData.each{root->
root.forms.each{form->
form.each{formKey,formValue->
//formValue.data?.gridData?.rowset?.each{row->
def rowset = formValue.data?.gridData?.rowset
if (rowset) {
for(int i=0;i<rowset.size();i++){
rowset[i].col1 = rowset[i].col1.toUpperCase()
println "${formKey} title:: ${formValue.title} row:: ${rowset[i]}"
}
}
}
}
}
我正在编写一个 Groovy 脚本来解析以下 json 字符串。我是 Groovy 和 Java 的新手,所以如果我遗漏了一些明显的东西,那么我会预先感谢您的耐心等待。
[
{
"forms": [
{
"form1": {
"title": "Form 1 Title",
"data": {}
}
},
{
"form2": {
"title": "Form 2 Title",
"data": {}
}
},
{
"form2": {
"title": "Form 2 Title",
"data": {
"gridData": {
"id": 1,
"fullGridId": "1",
"columns": {
"col1": "Cust Name",
"col2": "Cust Number",
"col3": "Cust Email"
},
"rowset": [
{
"col1": "Jane Eyre",
"col2": 11111,
"col3": "jane.eyre@gmail.com"
},
{
"col1": "Jack Russell",
"col2": 22222,
"col3": "jack.russell@mail.com"
},
{
"col1": "Abraham Lincoln",
"col2": 33333,
"col3": "POTUS16@wh.gov"
},
{
"col1": "Muhammad Ali",
"col2": 44444,
"col3": "theGreatest@gmail.com"
}
],
"summary": {
"records": 4
}
}
}
}
},
{
"form3": {
"title": "Form 3 Title",
"data": {}
}
}
]
}
]
我需要通读“form2”中的所有客户信息(“客户名称”、“客户编号”和“客户电子邮件”)。我认为我遇到的问题是父元素“form2”在此 json 中出现了两次。第一次出现没有数据,但我需要的数据在第二次出现。这是我阅读上面 json 的代码的摘录。变量“formData”是一个包含上述 json 字符串的字符串。
def jsonData = new JsonSlurper().parseText(formData);
def form2Rowset = jsonData.forms.form2.data.gridData.rowset;
for(i=0,i<rowset.size(),i++)
{
rowset[i].get("col1") ....do something
rowset[i].get("col2") ....do something
rowset[i].get("col3") ....do something
}
return;
我认为问题是“form2”在 json 字符串中出现了两次,但我不确定如何处理它。我正在寻找不需要 downloading/importing 任何附加包(如果可能?)的解决方案 - 我已经有了 JsonSlurper。如果您有想法,请描述具体代码,因为我是新手,没有具体代码可能无法跟踪概念。根据我的情况调整你的代码建议我不会有任何问题,但具体的代码将是最有帮助的....并且不胜感激!!
请注意,在 json 中,您有数组 [...]
和映射 {...}
def jsonData = new groovy.json.JsonSlurper().parseText(formData)
jsonData.each{root->
root.forms.each{form->
form.each{formKey,formValue->
formValue.data?.gridData?.rowset?.each{row->
row.col1 = row.col1.toUpperCase()
println "${formKey} title:: ${formValue.title} row:: ${row}"
}
}
}
}
相同,但有一个嵌套 each
替换为经典 for
jsonData.each{root->
root.forms.each{form->
form.each{formKey,formValue->
//formValue.data?.gridData?.rowset?.each{row->
def rowset = formValue.data?.gridData?.rowset
if (rowset) {
for(int i=0;i<rowset.size();i++){
rowset[i].col1 = rowset[i].col1.toUpperCase()
println "${formKey} title:: ${formValue.title} row:: ${rowset[i]}"
}
}
}
}
}