2016-07-07 9 views
0

をデコード:私はその上に次のコードを実行していますJSON/Pythonの - 私はJSON形式のファイルを、次のようになります 'datastores.json' 持っている

{ 
"{'ESXi_Host': 'elvis.lab.vsphere.com'}": { 
    "elvis.data": { 
     "capacity": 293131517952, 
      "uuid": "57431578-630f1322-7bf2-00212883a5b0", 
      "vmfs_version": "5.60", 
      "ssd": false, 
      "extents": [ 
       "mpx.vmhba1:C0:T1:L0" 
      ], 
      "local": true 

を:

​​

私は次のエラーを取得する:

この行で
TypeError: string indices must be integers 

esx_host = dstor['ESXi_Host'] 

私はそれが整数を期待していることを理解しています。私は

'json.loads' 

代わりの

'json.load' 

で下塗りし、さらにその後、

'(json_file.read())' 

代わりの

'(json_file)' 

で下塗りした場合の読みから、私はしかし私がやっていましたそれはstrinとしてファイルを読み込みますgではなく、整数の代わりに文字列の解析が可能です。なぜこれは機能しませんでしたか?

答えて

0

一つの問題は、あなたの.jsonで「ESXi_Host」キーを持っていないで、それは周りの

"{'ESXi_Host': 'elvis.lab.vsphere.com'}" 

予告""言い、キーが(これは単一の文字列である)"{'ESXi_Host': 'elvis.lab.vsphere.com'}"です。

第二は、ロードされたオブジェクトは、おそらく辞書なり、従ってフォームの反復

for dstor in datastors: 

上キーある(およびキーのみ整数インデックスを有する文字列である)、ではない値アクセス値に

for _, dstor in datastors.iteritems(): 

のようなものは、あなたのdatastoresを印刷し、正確なstructuが何であるかを調査しませんあなたの解析された.jsonの再。

+0

私は、単一の文字列が問題になるとは思わなかった。エラーmsgは "整数"を混乱させます。私は2つの文字列が実際に分割されるように書式設定を修正する方法を理解するのに苦労しています。 ESXiホスト/データストアをjson形式でプルするスクリプトは、ホスト/データストア名をプライマリキーにします。 dynamoDBの場合は、 "ESXi_Host"と "datastore"のラベルを主キーとして、対応する名前をキー値として持つ必要があります。これは私が思ったよりも難しいことが分かっています。私はvsphereからデータを取り出し、それを修正しようとしているスクリプトに戻ってきます。再度、感謝します! – tnunu

+0

整数に関するエラーは間違った反復に由来します。キーを繰り返し、キーは文字列、文字列は整数インデックスのみを持ちます。 – lejlot

関連する問題