代码之家  ›  专栏  ›  技术社区  ›  AutoTester213

Robot框架-类型错误:解析JSON时字符串索引必须是整数

  •  0
  • AutoTester213  · 技术社区  · 6 年前

    我正试图解析一个JSON数组,但我得到了以下错误

    TypeError: string indices must be integers
    

    Json:

    {
        'locationId': 'location1',
        'name': 'Name',
        'type': 'Ward',
        'patientId': None,
        'children': [{
            'locationId': 'location2',
            'name': 'Name',
            'type': 'Bed',
            'patientId': None,
            'children': [{
                'locationId': 'location3',
                'name': 'Name',
                'type': 'HospitalGroup',
                'patientId': None,
                'children': None
            }]
        }, {
            'locationId': 'location4',
            'name': 'Name',
            'type': 'Hospital',
            'patientId': None,
            'children': None
        }, {
            'locationId': 'location5',
            'name': 'Name',
            'type': 'Bed',
            'patientId': None,
            'children': None
        }, {
            'locationId': 'location6',
            'name': 'Name',
            'type': 'Bed',
            'patientId': None,
            'children': None
        }, {
            'locationId': 'location27',
            'name': 'Name',
            'type': 'Bed',
            'patientId': None,
            'children': None
        }]
    }
    

    我正在尝试获取所有locationid值,并将这些值逐个存储在列表中。

    这是我正在做的

        @{locationIds}=  create list
        :FOR  ${item}  IN   @{Location_Json}
        \  ${locationId}=  set variable  ${item['locationId']}
        \  log  ${locationId}
        \  append to list  ${locationIds}  '${locationId}'
    

    我也试过这个

        @{locationIds}=  create list
        :FOR  ${item}  IN   @{Location_Json}
        \  ${locationId}=  set variable  ${item['children'][0]['locationId']}
        \  log  ${locationId}
        \  append to list  ${locationIds}  '${locationId}'
    

    但我也有同样的错误。

    这条线上的测试失败了 ${locationId}= set variable ${item['locationId']}

    任何帮助都会被理解。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Todor Minakov    6 年前

    如果变量的内容 ${Location_Json} 确实是您在上面放置的JSON示例,这将解释异常“字符串索引必须是整数”。

    您使用的JSON是一个字典(不是列表);因此,在这个循环中:

    :FOR  ${item}  IN   @{Location_Json}
    

    的价值 ${item} 将是字典中的键-例如 locationId , name 等。

    如果您对“children”子项的“locationid”感兴趣,那么可以这样做-对“children”项进行迭代:

    :对于$item in@location_json['children']

    每次迭代时 ${item } 将是“children”中的子dict之一,您可以获取其“locationid”

    \    ${locationId}=  set variable  ${item['locationId']}
    

    与您的问题无关,请不要这样做:

    append to list  ${locationIds}  '${locationId}'
    

    不要把 ${locationId} 在单引号中-将会发生的是,这些引号现在将成为列表成员的一部分。
    比如,价值 ${LoistId}

    location5
    

    有了这些引言,它最终会

    'location5'
    

    我认为这不是你的目标;有了这些额外的报价,这将失败:

    Should Be Equal As Strings    location5      ${locationIds[3]}   # because locationIds[3] will have the extra quotes