kya
kya

Reputation: 1828

Error groovy.lang.MissingPropertyException: No such property: field for class: java.util.LinkedHashMap$Entry formating

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

Answers (0)

Related Questions