Ich habe folgende Bit von JSON-Daten, die ein Schnipsel aus einer großen Datei von JSON ist. Ich bin im Grunde nur um diese Daten zu erweitern. Ich mache mir Sorgen, dass ich es später zur vorhandenen JSON-Datei hinzufügen kann.Wie generiere ich JSON-Daten mit Python 2.7+
Die JSON-Daten-Schnipsel ist:
"Roles": [
{
"Role": "STACiWS_B",
"Settings": {
"HostType": "AsfManaged",
"Hostname": "JTTstSTBWS-0001",
"TemplateName": "W2K16_BETA_4CPU",
"Hypervisor": "sys2Director-pool4",
"InCloud": false
}
}
],
Also, was ich will viele weitere Datensätze der „Rolle“ zu machen, zu tun ist (mangels eines besseren Begriffs)
So etwas wie folgt aus:
"Roles": [
{
"Role": "Clients",
"Settings": {
"HostType": "AsfManaged",
"Hostname": "JTClients-0001",
"TemplateName": "Win10_RTM_64_EN_1511",
"Hypervisor": "sys2director-pool3",
"InCloud": false
}
},
{
"Role": "Clients",
"Settings": {
"HostType": "AsfManaged",
"Hostname": "JTClients-0002",
"TemplateName": "Win10_RTM_64_EN_1511",
"Hypervisor": "sys2director-pool3",
"InCloud": false
}
},
ich mit einigem python-Code gestartet, der wie so aussieht, aber es scheint, dass ich weg von der Markierung ziemlich weit bin
import json
import pprint
Roles = ["STACiTS","STACiWS","STACiWS_B"]
RoleData = dict()
RoleData['Role'] = dict()
RoleData['Role']['Setttings'] = dict()
ASFHostType = "AsfManaged"
ASFBaseHostname = ["JTSTACiTS","JTSTACiWS","JTSTACiWS_"]
HypTemplateName = "W2K12R2_4CPU"
HypPoolName = "sys2director"
def CreateASF_Roles(Roles):
for SingleRole in Roles:
print SingleRole #debug purposes
if SingleRole == 'STACiTS':
print ("We found STACiTS!!!") #debug purposes
NumOfHosts = 1
for NumOfHosts in range(20): #Hardcoded for STACiTS - Generate 20 STACiTS datasets
RoleData['Role']=SingleRole
RoleData['Role']['Settings']['HostType']=ASFHostType
ASFHostname = ASFBaseHostname + '-' + NumOfHosts.zfill(4)
RoleData['Role']['Settings']['Hostname']=ASFHostname
RoleData['Role']['Settings']['TemplateName']=HypTemplateName
RoleData['Role']['Settings']['Hypervisor']=HypPoolName
RoleData['Role']['Settings']['InCloud']="false"
CreateASF_Roles(Roles)
pprint.pprint(RoleData)
Ich bekomme diesen Fehler, der verwirrend ist, weil ich dachte, Wörterbücher könnten benannte Indizes haben.
Traceback (most recent call last):
File ".\CreateASFRoles.py", line 34, in <module>
CreateASF_Roles(Roles)
File ".\CreateASFRoles.py", line 26, in CreateASF_Roles
RoleData['Role']['Settings']['HostType']=ASFHostType
TypeError: string indices must be integers, not str
Alle Gedanken sind willkommen. Vielen Dank.
'RoleData ['Role']' ist kein Wörterbuch, es ist eine Zeichenkette. Weil Sie in der vorhergehenden Zeile 'RoleData ['Role'] = SingleRole' gesetzt haben und' SingleRole' über eine Liste von Strings iteriert. – larsks