How to parse JSON object in Forge?

I need to parse JSON object from Jira Cloud and I can’t find a way to.
I’m getting it via:

const fetchStatusForIssue = async (issueIdOrKey) => {
    const response = await api.asUser().requestJira(route`/rest/api/3/issue/${issueIdOrKey}/changelog`, {
        headers: {
            'Accept': 'application/json',
        }
    });
    return await response.json();
};

And parsing it here

const App = () => {
  const context = useProductContext();
    const status = useState(async () => await fetchStatusForIssue(context.platformContext.issueKey));
    const a1 = JSON.stringify(status, null, 2)
    let a2 = JSON.parse(a1)
    console.log(`1: ${a1}`); //returns full JSON
    console.log(`2: ${a2.values}`) // returns function values() { [native code] }
};

JSON looks like this:

[
  {
    "self": "https://api.atlassian.com/ex/jira/17501e86-091b-4743-b36c-1a6892e44de9/rest/api/3/issue/ADRB-3/changelog?maxResults=100&startAt=0",
    "maxResults": 100,
    "startAt": 0,
    "total": 3,
    "isLast": true,
    "values": [
      {
        "id": "823890",
        "author": {
          "self": "https://api.atlassian.com/ex/jira/17501e86-091b-4743-b36c-1a6892e44de9/rest/api/3/user?accountId=id",
          "accountId": "id",
          "emailAddress": "email",
          "avatarUrls": {
            "48x48": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png",
            "24x24": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png",
            "16x16": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png",
            "32x32": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png"
          },
          "displayName": "Victor ",
          "active": true,
          "timeZone": "America/Guatemala",
          "accountType": "atlassian"
        },
        "created": "2023-09-27T11:27:24.597-0600",
        "items": [
          {
            "field": "status",
            "fieldtype": "jira",
            "fieldId": "status",
            "from": "10006",
            "fromString": "Backlog",
            "to": "3",
            "toString": "In Progress"
          }
        ]
      },
      {
        "id": "823891",
        "author": {
          "self": "https://api.atlassian.com/ex/jira/17501e86-091b-4743-b36c-1a6892e44de9/rest/api/3/user?accountId=626047181046bb0071de5ef8",
          "accountId": "id",
          "emailAddress": "email",
          "avatarUrls": {
            "48x48": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png",
            "24x24": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png",
            "16x16": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png",
            "32x32": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png"
          },
          "displayName": "Victor K",
          "active": true,
          "timeZone": "America/Guatemala",
          "accountType": "atlassian"
        },
        "created": "2023-09-27T12:06:48.077-0600",
        "items": [
          {
            "field": "status",
            "fieldtype": "jira",
            "fieldId": "status",
            "from": "3",
            "fromString": "In Progress",
            "to": "10052",
            "toString": "Waiting On"
          }
        ]
      },
      {
        "id": "823892",
        "author": {
          "self": "https://api.atlassian.com/ex/jira/17501e86-091b-4743-b36c-1a6892e44de9/rest/api/3/user?accountId=626047181046bb0071de5ef8",
          "accountId": "id",
          "emailAddress": "email",
          "avatarUrls": {
            "48x48": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png",
            "24x24": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png",
            "16x16": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png",
            "32x32": "https://secure.gravatar.com/avatar/f92c81566848f19c1f81ef5815e75a41?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FVK-4.png"
          },
          "displayName": "Victor K",
          "active": true,
          "timeZone": "America/Guatemala",
          "accountType": "atlassian"
        },
        "created": "2023-09-27T12:58:50.173-0600",
        "items": [
          {
            "field": "status",
            "fieldtype": "jira",
            "fieldId": "status",
            "from": "10052",
            "fromString": "Waiting On",
            "to": "3",
            "toString": "In Progress"
          }
        ]
      }
    ]
  },
  null
]

By parse I mean a way to get to specific data in JSON object e.g. fromString and toString
I tried many different ways but none worked. Any help is much appreciated

The response itself console.log(1: ${a1}); seems already an array?
So, you would need to take the first element and there would be the values:

console.log(`2: ${a2[0].values}`)

I’m not sure where the top level array comes from, without looking into the APIs.
Feels like the REST api returns the top level object, and the top level array comes from something in the JavaScript code?

1 Like

Thanks Roman, that worked