我需要使用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
答案 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()]))