2014-04-03 64 views
1

我有一個很大的JSON文件,我試圖用JSON Slurper解析。 JSON文件包含有關錯誤的信息,因此它包含問題鍵,說明和註釋等內容。不是每個問題都有評論。例如,下面是JSON輸入的示例:JSON Slurper補償

{ 
    "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] 

返回「comment 3」,這是不正確的。有沒有辦法可以看到某個特定問題是否有任何意見?我寧願不必編輯JSON文件來添加空的註釋字段,但是這甚至會有幫助嗎?

回答

2

你可以這樣做:

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

所以它檢查body,如果不存在,返回一個空列表

UPDATE
基於更新的問題,你可以做:

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

謝謝!但是索引信息在哪裏呢?我們如何知道它正在查看哪個問題? – Jess

+0

不知道你是什麼意思...第一個列表將包含第一個評論,第二個第二個,等等 –

+0

我明白你的意思了。雖然我得到一個NullPointerException。它說:「無法獲得對空對象的屬性'註釋'」。 – Jess