2016-12-26 36 views
-1

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

下面是一个文件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

使用'json.loads()'得到一个python字典,然后告诉我们你的尝试。这是一个乏味的代码写作任务,你可以更好地完成。 –

+0

你有没有尝试过或者你只是要求我们做你的工作? – inetphantom

+0

谢谢Jean。我确实有代码,正在寻找如何读取服务器名称作为键。 – Anil

回答

0

详细阐述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文件你想要的格式。

+0

谢谢。这对我有帮助。 – Anil

+0

接受了答案。谢谢 – Anil

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()])) 
+0

这给我错误:TypeError:期望的字符串或缓冲区 – Anil

+1

由kuriouscoder提供的解决方案正在为我工​​作。感谢您的帮助。 – Anil