Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python 2.7+;_Python_Json_Dictionary - Fatal编程技术网

如何使用python 2.7+;

如何使用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",

我必须遵循一段JSON数据,这是一个JSON大文件的片段。 我基本上只是想扩大这些数据。 稍后我会担心将其添加到现有的JSON文件中

JSON数据片段是:

    "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
正在迭代字符串列表。好的,谢谢。我知道这一定是某种语法错误,但是,我很难找到好的例子来说明我所要做的事情。很高兴我能帮上忙!如果你不介意接受对你有帮助的答案,那就太好了!