0

次のような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

その上で次のコードを実行しています。

import json

with open("C:\PyVmomi_out\\datastores.json") as json_file:
datastores = json.loads(json_file.read())
for dstor in datastores:
    esx_host = dstor['ESXi_Host']
    datastore = dstor['datastore']

次のエラーが表示されます。

TypeError: string indices must be integers

この行で:

esx_host = dstor['ESXi_Host']

整数を期待していることを理解しています。私が行っていた読書から、私が下塗りした場合でも

'json.loads'

それ以外の

'json.load'

また、下塗りされました

'(json_file.read())'

それ以外の

'(json_file)'

次に、ファイルを文字列として読み取り、整数の代わりに文字列の解析を許可します。なぜこれがうまくいかなかったのですか?

4

1 に答える 1

0

1 つの問題は、.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、解析された .json の正確な構造を調査します。

于 2016-07-07T22:05:44.277 に答える