0

我正在编写一个 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 字符串中出现了两次,但我不确定如何处理。我正在寻找一种不需要下载/导入任何额外包的解决方案(如果可能的话?) - 我已经有了 JsonSlurper。如果您有想法,请描述具体代码,因为我是新手,没有具体代码可能不会跟踪概念。我不会有任何问题根据我的情况定制您的代码建议,但具体的代码将是最有帮助的......并且感激不尽!

4

1 回答 1

0

请注意,在 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]}"
        }
      }
    }
  }
}
于 2021-10-16T02:23:19.617 回答