我正在尝试解析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']}
的测试失败
任何帮助都会得到认可。
答案 0 :(得分:1)
如果var ${Location_Json}
的内容确实是您上面提到的json示例,则可以解释异常“字符串索引必须为整数”。
您正在使用的json是字典(不是列表);因此,在此循环中:
:FOR ${item} IN @{Location_Json}
,${item}
的值将成为字典中的键-例如顶级词典的locationId
,name
等。
如果您对“ children”子对象的“ locationId”感兴趣,可以这样做-在“ children”项上进行迭代:
:用于$ {item} IN @ {Location_Json ['children']}
在每次迭代中,${item}
将成为“子项”中的子变量之一,您可以获取其“ locationId”
\ ${locationId}= set variable ${item['locationId']}
与您的问题无关,请不要这样做:
append to list ${locationIds} '${locationId}'
请勿将${locationId}
的值放在单引号内-那样的话,这些引号现在将成为列表成员的一部分。
假设${locationId}
的值为
location5
周围带有引号,它将最终显示为
'location5'
我认为那不是你的目标;用这些额外的引号,将失败:
Should Be Equal As Strings location5 ${locationIds[3]} # because locationIds[3] will have the extra quotes