Reputation: 1828
I am struggling with getting the correct output from a complex json groovy object. The structure of the json object is:
{
"self": "https://pretty.atlassian.net/rest/api/3/issue/TWP-20/changelog?maxResults=100&startAt=0",
"maxResults": 100,
"startAt": 0,
"total": 24,
"isLast": true,
"values": [{
"id": "3140882",
"author": {
"self": "https://pretty.atlassian.net/rest/api/3/user?accountId=621g70bd9c617b003a1e8e1e",
"accountId": "313g12gh9d617b119a6e8e1e",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/04cc6e3e460261dc100cf9af99a08cb5?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMD-0.png",
"24x24": "https://secure.gravatar.com/avatar/04cc6e3e460261dc100cf9af99a08cb5?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMD-0.png",
"16x16": "https://secure.gravatar.com/avatar/04cc6e3e460261dc100cf9af99a08cb5?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMD-0.png",
"32x32": "https://secure.gravatar.com/avatar/04cc6e3e460261dc100cf9af99a08cb5?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMD-0.png"
},
"displayName": "Peter Pan",
"active": true,
"timeZone": "America/Los_Angeles",
"accountType": "atlassian"
},
"created": "2022-08-25T08:41:25.441-0700",
"items": [{
"field": "status",
"fieldtype": "jira",
"fieldId": "status",
"from": "10105",
"fromString": "Define Business Requirements",
"to": "10109",
"toString": "Review Business Requirements"
}]
}, {
"id": "3140887",
"author": {
"self": "https://pretty.atlassian.net/rest/api/3/user?accountId=2478c6t3960g71006b431f55",
"accountId": "2478c6t3960g71006b431f55",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/e3440e1c2c30d219106982d3383dc5aa?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FKS-5.png",
"24x24": "https://secure.gravatar.com/avatar/e3440e1c2c30d219106982d3383dc5aa?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FKS-5.png",
"16x16": "https://secure.gravatar.com/avatar/e3440e1c2c30d219106982d3383dc5aa?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FKS-5.png",
"32x32": "https://secure.gravatar.com/avatar/e3440e1c2c30d219106982d3383dc5aa?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FKS-5.png"
},
"displayName": "John Doe",
"active": true,
"timeZone": "America/Los_Angeles",
"accountType": "atlassian"
},
"created": "2022-08-25T08:42:13.466-0700",
"items": [{
"field": "Total Votes",
"fieldtype": "custom",
"fieldId": "customfield_14609",
"from": null,
"fromString": "0",
"to": null,
"toString": "1"
}, {
"field": "Last Voter ID",
"fieldtype": "custom",
"fieldId": "customfield_14619",
"from": null,
"fromString": null,
"to": null,
"toString": "2478c6t3960g71006b431f55"
}]
}, {
"id": "3140890",
"author": {
"self": "https://pretty.atlassian.net/rest/api/3/user?accountId=549059%2d54c699-d14c-49c1-82ce-e30364261799",
"accountId": "549059:2d54c699-d14c-49c1-82ce-e30364261799",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png",
"24x24": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png",
"16x16": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png",
"32x32": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png"
},
"displayName": "Batman Doe",
"active": true,
"timeZone": "America/Los_Angeles",
"accountType": "atlassian"
},
"created": "2022-08-25T09:07:54.433-0700",
"items": [{
"field": "Total Votes",
"fieldtype": "custom",
"fieldId": "customfield_14609",
"from": null,
"fromString": "1",
"to": null,
"toString": "2"
}, {
"field": "Last Voter ID",
"fieldtype": "custom",
"fieldId": "customfield_14619",
"from": null,
"fromString": "2478c6t3960g71006b431f55",
"to": null,
"toString": "549059:2d54c699-d14c-49c1-82ce-e30364261799"
}]
}, {
"id": "3140891",
"author": {
"self": "https://pretty.atlassian.net/rest/api/3/user?accountId=549059%2d54c699-d14c-49c1-82ce-e30364261799",
"accountId": "549059:2d54c699-d14c-49c1-82ce-e30364261799",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png",
"24x24": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png",
"16x16": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png",
"32x32": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png"
},
"displayName": "Batman Doe",
"active": true,
"timeZone": "America/Los_Angeles",
"accountType": "atlassian"
},
"created": "2022-08-25T09:09:06.142-0700",
"items": [{
"field": "status",
"fieldtype": "jira",
"fieldId": "status",
"from": "12004",
"fromString": "Posted for Voting",
"to": "12004",
"toString": "Posted for Voting"
}]
}, {
"id": "3140892",
"author": {
"self": "https://pretty.atlassian.net/rest/api/3/user?accountId=549059%2d54c699-d14c-49c1-82ce-e30364261799",
"accountId": "549059:2d54c699-d14c-49c1-82ce-e30364261799",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png",
"24x24": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png",
"16x16": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png",
"32x32": "https://secure.gravatar.com/avatar/bd036fa4eb2fba7db71c4f5099b8e913?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJD-6.png"
},
"displayName": "Batman Doe",
"active": true,
"timeZone": "America/Los_Angeles",
"accountType": "atlassian"
},
"created": "2022-08-25T09:09:07.991-0700",
"items": [{
"field": "Total Votes",
"fieldtype": "custom",
"fieldId": "customfield_14609",
"from": null,
"fromString": "2",
"to": null,
"toString": "1"
}]
}, {
"id": "3141006",
"author": {
"self": "https://pretty.atlassian.net/rest/api/3/user?accountId=549059%2d54c699-d14c-49c1-82ce-e30364261799",
"accountId": "549059:2d54c699-d14c-49c1-82ce-e30364261799",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png",
"24x24": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png",
"16x16": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png",
"32x32": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png"
},
"displayName": "Automation for Jira",
"active": true,
"timeZone": "America/Los_Angeles",
"accountType": "app"
},
"created": "2022-09-01T13:12:36.808-0700",
"items": [{
"field": "Ticket Voting Status",
"fieldtype": "custom",
"fieldId": "customfield_14608",
"from": "16700",
"fromString": "Open",
"to": "16701",
"toString": "Closed"
}],
"historyMetadata": {}
}]
}
For example, I am trying to filter the response into this format (expected output):
["displayName": "John Doe", "created": "2022-08-25T08:42:13.466-0700", "field": "Total Votes","toString": "1"],["displayName": "Batman Doe","created": "2022-08-25T09:09:07.991-0700", "field": "Total Votes","toString": "2"]
Below is the groovy code:
import org.apache.log4j.Logger;
import java.net.HttpURLConnection;
import org.json.JSONObject;
import org.apache.log4j.Level;
import groovy.json.JsonSlurper
Logger log = Logger.getLogger("za.co.jira.groovy")
// Get the Change History for the issue key specified above
def issue = get("/rest/api/3/issue/${issue.key}/changelog")
.header('Content-Type', 'application/json')
.asObject(Map)
.body
return issue
When I try to find "Total Votes" here:
def onlyTotalVotes = issue.findAll {it.field =="Total Votes"}
I get an error
groovy.lang.MissingPropertyException: No such property: field for class: java.util.LinkedHashMap$Entry
But when I add the following lines to the code:`
def issueResult = issue.values.items as List<Map>
def issueItems = issueResult.flatten()
def onlyTotalVotes = issueItems.findAll {it.field =="Total Votes"}
I only get a Total Votes, with everything else not included. I've been battling with it for while. Please help
Upvotes: 0
Views: 1228