如何使用python 2.7+;
我必须遵循一段JSON数据,这是一个JSON大文件的片段。 我基本上只是想扩大这些数据。 稍后我会担心将其添加到现有的JSON文件中 JSON数据片段是:如何使用python 2.7+;,python,json,dictionary,Python,Json,Dictionary,我必须遵循一段JSON数据,这是一个JSON大文件的片段。 我基本上只是想扩大这些数据。 稍后我会担心将其添加到现有的JSON文件中 JSON数据片段是: "Roles": [ { "Role": "STACiWS_B", "Settings": { "HostType": "AsfManaged", "Hostname": "JTTstSTBWS-0001", "TemplateName": "W2K16_BETA_4CPU",
"Roles": [
{
"Role": "STACiWS_B",
"Settings": {
"HostType": "AsfManaged",
"Hostname": "JTTstSTBWS-0001",
"TemplateName": "W2K16_BETA_4CPU",
"Hypervisor": "sys2Director-pool4",
"InCloud": false
}
}
],
所以我想做的是制作更多的“角色”数据集(因为缺少更好的术语)
比如说:
"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
}
},
我从一些看起来像这样的python代码开始,但是,似乎我离目标还很远
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)
我不断地得到这个错误,这是令人困惑的,因为我认为字典可以命名索引
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
回溯(最近一次呼叫最后一次):
文件“\CreateASFRoles.py”,第34行,在
创建ASF_角色(角色)
文件“\CreateASFRoles.py”,第26行,在CreateASF_角色中
RoleData['Role']['Settings']['HostType']=ASFHostType
TypeError:字符串索引必须是整数,而不是str
任何想法都很感激。谢谢。就在这里:
RoleData['Role']=SingleRole
您将RoleData设置为字符串“STACiTS”。因此,下一个命令的计算结果为:
'STACiTS'['Settings']['HostType']=ASFHostType
这当然是试图用另一个字符串索引成一个字符串,这是您的错误。字典可以有命名索引,但您用字符串重写了创建的字典
您可能打算创建RoleData[“设置”]作为字典,然后分配给它,而不是RoleData[“角色”][“设置”]
另一方面,这里还有另一个语法错误:
RoleData['Role']['Setttings'] = dict()
“设置”的错误拼写可能会在以后给您带来类似的问题,除非得到修复。
RoleData['Role']
不是字典,而是字符串。因为在前一行中,您设置了RoleData['Role']=SingleRole
,并且SingleRole
正在迭代字符串列表。好的,谢谢。我知道这一定是某种语法错误,但是,我很难找到好的例子来说明我所要做的事情。很高兴我能帮上忙!如果你不介意接受对你有帮助的答案,那就太好了!