Python 将JSOn多个对象解析为CSV

Python 将JSOn多个对象解析为CSV,python,json,csv,Python,Json,Csv,我需要帮助解析一个JSON与多个对象到CSV,任何帮助将不胜感激。我试图编写代码,并且能够只解析JSON的out对象,但不能解析所有对象 我对解析内部JSON对象“categoryName”:“Databases” 我不是发布完整的JSON,因为它非常冗长,只是发布了部分内容,如果它是为了更好地理解下面的内容 { "categories" : [ { "categoryName" : "HDFSEncryptionZones", "metrics" : [ { "metricNa

我需要帮助解析一个JSON与多个对象到CSV,任何帮助将不胜感激。我试图编写代码,并且能够只解析JSON的out对象,但不能解析所有对象

我对解析内部JSON对象“categoryName”:“Databases”

我不是发布完整的JSON,因为它非常冗长,只是发布了部分内容,如果它是为了更好地理解下面的内容

    {
"categories" : [ {
  "categoryName" : "HDFSEncryptionZones",
"metrics" : [ {
  "metricName" : "EncryptionZone Object Count",
  "value" : 0
}, {
  "metricName" : "Out of EncryptionZone Objects Count",
  "value" : 0
} ]
}, {
  "categoryName" : "Databases",
  "metrics" : [ {
  "metricName" : "No. of Databases",
  "value" : 78
 }, {
  "metricName" : "Top 5 Databases (by no of tables)",
  "value" : [ {
    "name" : "abc",
    "value" : 1234,
    "id" : 1187422
  }, {
    "name" : "def",
    "value" : 578,
    "id" : 8194003
  }, {
    "name" : "ghi",
    "value" : 241,
    "id" : 1214282
  }, {
    "name" : "jkl",
    "value" : 214,
    "id" : 11677477
  }, {
    "name" : "mno",
    "value" : 186,
    "id" : 6716158
  }, {
    "name" : "pqr",
    "value" : 130,
    "id" : 59489134
  }, {
    "name" : "stu",
    "value" : 102,
    "id" : 59489133
  }, {
    "name" : "xyz",
    "value" : 96,
    "id" : 11630638
  }, {
    "name" : "temp",
    "value" : 80,
    "id" : 100074536
  }, {
    "name" : "test",
    "value" : 72,
    "id" : 59489132
  } ]
  } ]
 }, {
  "categoryName" : "Storage",
  "metrics" : [ {
   "metricName" : "No. of S3 Objects.",
   "value" : 0
 }, {
   "metricName" : "No. of HDFS Objects.",
   "value" : 3097309
  } ]
 }, {...
试一试


我假设您想要提取数据库列表。如果你需要浏览json直到你得到一个有趣的列表。然后是一个
csv.DictWriter
,因为您将有一个dict.code列表,可以是:

import requests
import json
import csv


from requests.auth import HTTPBasicAuth
r = requests.get('https://url')
properties = r.json()['categories']


for temp in properties:
    if "Databases" == temp['categoryName']:     # first locate "categoryName": " Databases"
        for kind in temp['metrics']:
            for value in kind.values():
                if isinstance(value, list):     # next find a list value
                    # open a file for writing (with ensure close on end of block)
                    with open('/home/sourcecode/csv_data.csv', 'w', newline = '') as csv_data:
                        # create the csv writer object
                        writer = csv.DictWriter(fd, fieldnames = value[0].keys())
                        writer.writeheader()       # first the header
                        for base in value:         # then the values
                            writer.writerow(base)

不确定。你想要达到的目标。你能把预期的输出也张贴出来吗?
for category in properties:
  if category['categoryName'] == "Databases":
      for metric in category['metrics']:
        if metric['metricName'] == "Top 5 Databases (by no of tables)":
          for m in metric['value']:
            print(m['name'],m['value'],m['id'],sep=',')
import requests
import json
import csv


from requests.auth import HTTPBasicAuth
r = requests.get('https://url')
properties = r.json()['categories']


for temp in properties:
    if "Databases" == temp['categoryName']:     # first locate "categoryName": " Databases"
        for kind in temp['metrics']:
            for value in kind.values():
                if isinstance(value, list):     # next find a list value
                    # open a file for writing (with ensure close on end of block)
                    with open('/home/sourcecode/csv_data.csv', 'w', newline = '') as csv_data:
                        # create the csv writer object
                        writer = csv.DictWriter(fd, fieldnames = value[0].keys())
                        writer.writeheader()       # first the header
                        for base in value:         # then the values
                            writer.writerow(base)