2016-12-26 17 views
-1

以下のJsonデータをpythonで解析し、csvファイルに書き込む必要があります。私は以下の2つのサーバー名しか含まれていませんが、私のリストは大きいです。希望の出力を得るためにサンプルコードで助けてください。PythonのJSONデータをCSVファイルに解析する

{ 
"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 

出力フォーマット:

以下

は、ファイルserver_info.jsonの私のJSONデータであります
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 dictを取得してから、あなたの試行を見せてください。これは面倒なコード作成作業であり、より良い結果が得られます。 –

+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

関連する問題