如何解析具有相同父元素名称的 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]}"
        }
      }
    }
  }
}