Ich habe json formatierte Datei, 'datastores.json', die wie folgt aussieht:JSON/Python - Decodierung
{
"{'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
Ich verwende den folgenden Code auf:
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']
I erhalten folgende Fehlermeldung:
TypeError: string indices must be integers
Auf dieser Linie:
esx_host = dstor['ESXi_Host']
Ich verstehe, dass es eine ganze Zahl erwartet. Aus der Lektüre hatte ich mich getan, obwohl, wenn ich in
'json.loads'
substrierten statt
'json.load'
und auch in
'(json_file.read())'
statt
'(json_file)'
dann substrierten es würde die Datei als strin lesen g und erlauben String-Parsing anstelle von ganzen Zahlen. Warum hat das nicht funktioniert?
Ich wusste nicht, dass die einzelne Zeichenfolge ein Problem wäre. Der Fehler msg erwähnt "Ganzzahlen", verwirrend. Ich kämpfe, um herauszufinden, wie man die Formatierung repariert, damit die zwei Zeichenketten tatsächlich geteilt werden. Das Skript zum Abrufen der ESXi-Hosts/Datenspeicher im JSON-Format macht den Namen des Hosts/Datenspeichers zum Primärschlüssel. Für dynamoDB benötige ich, dass sie die Bezeichnung "ESXi_Host" und "Datenspeicher" als Primärschlüssel und die entsprechenden Namen als Schlüsselwerte haben. Dies erweist sich als schwieriger als ich dachte. Ich gehe zurück zu dem Skript, das die Daten aus vsphere holt und versuche, es zu ändern. Danke noch einmal! – tnunu
Der Fehler bezüglich Ganzzahlen stammt von der falschen Iteration. Sie durchlaufen iterieren über Schlüssel, Schlüssel sind Zeichenfolgen und Zeichenfolge haben nur ganzzahlige Indizes. – lejlot