将Python中的JSON数据解析为CSV文件

时间:2016-12-26 16:53:32

标签: python json csv

我需要使用python解析下面的Json数据并写入csv文件。下面我只包含了2个服务器名称,但我的列表很大。请帮助您获取示例代码以获得所需的输出。

下面是我在文件server_info.json中的json数据:

{
"dev-server":
    {
    "hoststatus":
        {
        "host_name":"dev-server",
        "current_state":"2",
        "last_time_up":"1482525184"
        },
    "servicestatus":
        {
        "/ Filesystem Check":
            {
            "host_name":"dev-server",
            "service_description":"/ Filesystem Check",
            "current_state":"1",
            "state_type":"1"
            },
        "/home Filesystem Check":
            {
            "host_name":"dev-server",
            "service_description":"/home Filesystem Check",
            "current_state":"2",
            "state_type":"2"
            }
        }
    },
"uat-server":
    {
    "hoststatus":
        {
        "host_name":"uat-server",
        "current_state":"0",
        "last_time_up":"1460000000"
        },
    "servicestatus":
        {
        "/ Filesystem Check":
            {
            "host_name":"uat-server",
            "service_description":"/ Filesystem Check",
            "current_state":"0",
            "state_type":"1"
            },
        "/home Filesystem Check":
            {
            "host_name":"uat-server",
            "service_description":"/home Filesystem Check",
            "current_state":"1",
            "state_type":"2"
            }
        }
    }
}

预期产出:

输出格式:

hoststatus.host_name,hoststatus.current_state,hoststatus.last_time_up
-------------------------------------------------------------
dev-server,2,1482525184
uat-server,0,1460000000

输出格式:

servicestatus.host_name,servicestatus.service_description,servicestatus.current_state,servicestatus.state_type
--------------------------------------------------------------------------------
dev-server,/ Filesystem Check,1,1
dev-server,/home Filesystem Check,2,2
uat-server,/ Filesystem Check,0,1
uat-server,/home Filesystem Check,1,2

2 个答案:

答案 0 :(得分:1)

详细阐述Jean-Fracois Fabre提到的内容,json.load()可用于读取JSON文件并解析为JSON的Python对象表示。 json.loads()执行相同操作,但输入是字符串而不是文件(有关详细信息,请参阅json模块)。

请注意,如果您将服务器日志保存在文件中,则可以从以下内容开始:

import json
file = open('logs.txt')
data = json.load(file) # now the JSON object is represented as Python dict
for key in data.keys(): # dev-server and uat-server are keys
    service_status = data[key]['servicestatus'] # this would give out the servicestatus
    host_status = data[key]['hoststatus'] # this would give out the hoststatus

有了这个,您可以使用csv模块以您希望的格式将其写为CSV文件。

答案 1 :(得分:0)

列表理解的一个例子。

import json

d = json.loads(data)

print("\n".join([','.join((hstat['host_name'], hstat['current_state'], hstat['last_time_up']))
                 for g in d.values()
                 for k, hstat in g.items() if k == 'hoststatus']))

print("\n".join([','.join((v['host_name'], v['service_description'], v['current_state'], v['state_type']))
                 for g in d.values()
                 for k, sstat in g.items() if k == 'servicestatus'
                 for v in sstat.values()]))