JSON Slurper偏移

时间:2014-04-03 14:50:00

标签: json groovy

我有一个很大的JSON文件,我试图用JSON Slurper解析。 JSON文件包含有关错误的信息,因此它包含问题密钥,描述和注释等内容。不是每个问题都有评论。例如,以下是JSON输入的示例:

    {
   "projects": [
      {
      "name": "Test Project",
      "key": "TEST",
      "issues": [
      {
         "key": "BUG-1",
         "priority": "Major",
         "comments": [
           {
             "author": "a1",
             "created": "d1",
             "body": "comment 1"
           },
           {
             "author": "a2",
             "created": "d2",
             "body": "comment 2"
           }
         ]
      },
      {
         "key": "BUG-2",
         "priority": "Major"
      },
      {
         "key": "BUG-3",
         "priority": "Major",
         "comments": [
           {
             "author": "a3",
             "created": "d3",
             "body": "comment 3"
           }
         ]
      }
    ]
}
]
}

我有一个基于JSON解析创建Issue对象的方法。当每个问题至少有一个评论时,一切都很顺利,但是,一旦出现没有评论的问题,其他问题就会得到错误的评论。我目前正在根据问题总数循环遍历JSON文件,然后根据我所获得的问题数量来查找评论。所以,例如,

parsedData.issues.comments.body[0][0][0]

返回"评论1"。然而,

parsedData.issues.comments.body[0][1][0]

返回"评论3",这是不正确的。有什么方法可以看出特定问题是否有任何意见?我宁愿不必编辑JSON文件来添加空注释字段,但这会有帮助吗?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

parsedData.issues.comments.collect { it?.body ?: [] }

因此它检查body,如果不存在,则返回空列表

<强>更新
根据问题的更新,您可以:

parsedData.projects.collectMany { it.issues.comments.collect { it?.body ?: [] } }