Home > Net >  How to extract data from complex JSON object?
How to extract data from complex JSON object?

Time:06-30

I am trying to extract data from the json file I got from a get request.

  {
    "data": [
        {
            "type": "Projects",
            "id": "102777c7-50a7-592d-1b65-621d5850a5bb",
            "attributes": {
                "name": "Hydroelectric Project Updated from Postman",
                "projectid": "001"
            },
            "relationships": {
                "Accounts": "Account1"
                "Notes": "Note1"
            }
        },
        {
            "type": "Projects",
            "id": "102c7131-d797-c085-d248-621d5820494f",
            "attributes": {
                "name": "Ana Hydroelectric Project",
                "projectid": "002"
            },
            "relationships": {
                "Accounts": "Account1"
                "Notes": "Note1"
            }
        },
        {
            "type": "Projects",
            "id": "1041f300-5acf-4bd9-2ec4-621d58bbe6bc",
            "attributes": {
                "name": "Methane Capture Project",
                "projectid": "003"
            },
            "relationships": {
                "Accounts": "Account1"
                "Notes": "Note1"
            }
        }
    ]
}

I have an empty dictionary that stores projectid as Key.

projectids = {
    001:"",
    002:"",
    003:"",
    004:"",
}

I was looking for a way to find "projectid" inside "attributes" and the corresponding value for "id" and populate the dictionary projectids with the key(['attributes']['projectid']) and values(id):

{
 "001": "102777c7-50a7-592d-1b65-621d5850a5bb",
 "002": "102c7131-d797-c085-d248-621d5820494f",
 "003": "1041f300-5acf-4bd9-2ec4-621d58bbe6bc",
 "004": ""
}

CodePudding user response:

You can try this, assuming data is your variable for the response from the GET request

projectids = {}
for item in data['data']:
    projectids[item['attributes']['projectid']] = item['id']

Output:

{
   '001': '102777c7-50a7-592d-1b65-621d5850a5bb', 
   '002': '102c7131-d797-c085-d248-621d5820494f', 
   '003': '1041f300-5acf-4bd9-2ec4-621d58bbe6bc'
}

CodePudding user response:

If data is your input data from the question, then:

projectids = {f"{i:>03}": "" for i in range(1, 5)}

out = {
    **projectids,
    **{d["attributes"]["projectid"]: d["id"] for d in data["data"]},
}
print(out)

Prints:

{
    "001": "102777c7-50a7-592d-1b65-621d5850a5bb",
    "002": "102c7131-d797-c085-d248-621d5820494f",
    "003": "1041f300-5acf-4bd9-2ec4-621d58bbe6bc",
    "004": "",
}

CodePudding user response:

Simply try this:

json_data = {
    "data": [
        {
            "type": "Projects",
            "id": "102777c7-50a7-592d-1b65-621d5850a5bb",
            "attributes": {
                "name": "Hydroelectric Project Updated from Postman",
                "projectid": "001"
            },
            "relationships": {
                "Accounts": "Account1",
                "Notes": "Note1"
            }
        },
        {
            "type": "Projects",
            "id": "102c7131-d797-c085-d248-621d5820494f",
            "attributes": {
                "name": "Ana Hydroelectric Project",
                "projectid": "002"
            },
            "relationships": {
                "Accounts": "Account1",
                "Notes": "Note1"
            }
        },
        {
            "type": "Projects",
            "id": "1041f300-5acf-4bd9-2ec4-621d58bbe6bc",
            "attributes": {
                "name": "Methane Capture Project",
                "projectid": "003"
            },
            "relationships": {
                "Accounts": "Account1",
                "Notes": "Note1"
            }
        }
    ]
}

Just asumme the above json data and try the following code:

project_ids = {item['attributes']['projectid']:item['id'] for item in json_data['data']}

expected output:

{'001': '102777c7-50a7-592d-1b65-621d5850a5bb',
 '002': '102c7131-d797-c085-d248-621d5820494f',
 '003': '1041f300-5acf-4bd9-2ec4-621d58bbe6bc'}
  • Related