简体   繁体   中英

3 levels json count in python

I am new at python, I´ve worked with other languages... I´ve made this code with Java and works, but now, I must do it in python. I have a json of 3 levels, the first two are: resources, usages, and I want to count the names on the third level. I´ve seen several examples but I cant get it done

import json

data = {
  "startDate": "2019-06-23T16:07:21.205Z",
  "endDate": "2019-07-24T16:07:21.205Z",
  "status": "Complete",
  "usages": [
    {
      "name": "PureCloud Edge Virtual Usage",
      "resources": [
        {
          "name": "Edge01-VM-GNS-DemoSite01 (1f279086-a6be-4a21-ab7a-2bb1ae703fa0)",
          "date": "2019-07-24T09:00:28.034Z"
        },
        {
          "name": "329ad5ae-e3a3-4371-9684-13dcb6542e11",
          "date": "2019-07-24T09:00:28.034Z"
        },        
        {
          "name": "e5796741-bd63-4b8e-9837-4afb95bb0c09",
          "date": "2019-07-24T09:00:28.034Z"
        }
      ]
    },
    {
      "name": "PureCloud for SmartVideo Add-On Concurrent",
      "resources": [
        {
          "name": "jpizarro@gns.com.co",
          "date": "2019-06-25T04:54:17.662Z"
        },
        {
          "name": "jaguilera@gns.com.co",
          "date": "2019-06-25T04:54:17.662Z"
        },        
        {
          "name": "dcortes@gns.com.co",
          "date": "2019-07-15T15:06:09.203Z"
        }
      ]
    },
    {
      "name": "PureCloud 3 Concurrent User Usage",
      "resources": [
        {
          "name": "jpizarro@gns.com.co",
          "date": "2019-06-25T04:54:17.662Z"
        },
        {
          "name": "jaguilera@gns.com.co",
          "date": "2019-06-25T04:54:17.662Z"
        },       
        {
          "name": "dcortes@gns.com.co",
          "date": "2019-07-15T15:06:09.203Z"
        }
      ]
    },
    {
      "name": "PureCloud Skype for Business WebSDK",
      "resources": [
        {
          "name": "jpizarro@gns.com.co",
          "date": "2019-06-25T04:54:17.662Z"
        },
        {
          "name": "jaguilera@gns.com.co",
          "date": "2019-06-25T04:54:17.662Z"
        },      
        {
          "name": "dcortes@gns.com.co",
          "date": "2019-07-15T15:06:09.203Z"
        }
      ]
    }
  ],
  "selfUri": "/api/v2/billing/reports/billableusage"
}

cantidadDeLicencias = 0
cantidadDeUsages = len(data['usages'])

for x in range(cantidadDeUsages):
    temporal = data[x]
    cantidadDeResources = len(temporal['resource'])
    for z in range(cantidadDeResources):
        print(x)

What changes I have to make? Maybe I have to do it on another approach? Thanks in advance

Update Code that works

cantidadDeLicencias = 0
for usage in data['usages']:
    cantidadDeLicencias = cantidadDeLicencias + len(usage['resources'])

print(cantidadDeLicencias)

You can do this:

for usage in data['usages']:
    print(len(usage['resources']))

If you want to know the number of names in each of the resources level, counting the duplicated names (eg "jaguilera@gns.com.co" appears more than one time in your data), then just do iterate over the first-level ( usages ) and sum the size of each array

cantidadDeLicencias = 0
for usage in data['usages']:
    cantidadDeLicencias += len(usage['resources'])

print(cantidadDeLicencias)

If you don't want to count duplicates, then use a set and iterate over each resources array

cantidadDeLicencias_set = {}
for usage in data['usages']:
    for resource in usage['resources']:
        cantidadDeLicencias_set.add(resource['name'])

print(len(cantidadDeLicencias_set ))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM