问题:
我无法获取一些信息。 shipToAddress部分中的城市和州。
以下是我从ups网站提出的要求中读取的易于阅读的格式的数据:
数据:
data = {
'statusCode': '200',
'statusText': 'Successful',
'isLoggedInUser': False,
'trackedDateTime': '04/16/2019 1:33 P.M. EST',
'isBcdnMultiView': False,
'trackDetails': [{
'errorCode': None,
'errorText': None,
'requestedTrackingNumber': '1Z3774E8YN99957400',
'trackingNumber': '1Z3774E8YN99957400',
'isMobileDevice': False,
'packageStatus': 'Loaded on Delivery Vehicle',
'packageStatusType': 'I',
'packageStatusCode': '072',
'progressBarType': 'InTransit',
'progressBarPercentage': '90',
'simplifiedText': '',
'scheduledDeliveryDayCMSKey': 'cms.stapp.tue',
'scheduledDeliveryDate': '04/16/2019',
'noEstimatedDeliveryDateLabel': None,
'scheduledDeliveryTime': 'cms.stapp.eod',
'scheduledDeliveryTimeEODLabel': 'cms.stapp.eod',
'packageCommitedTime': '',
'endOfDayResCMSKey': None,
'deliveredDayCMSKey': '',
'deliveredDate': '',
'deliveredTime': '',
'receivedBy': '',
'leaveAt': None,
'leftAt': '',
'shipToAddress': {
'streetAddress1': '',
'streetAddress2': '',
'streetAddress3': '',
'city': 'OCEAN',
'state': 'NJ',
'province': None,
'country': 'US',
'zipCode': '',
'companyName': '',
'attentionName': '',
'isAddressCorrected': False,
'isReturnAddress': False,
'isHoldAddress': False,
}}]}
代码:
data = response.text
addressinfo =json.loads(data)['trackDetails']['shipToAddress']
for entry in addressinfo:
city = (entry['city'])
state = (entry['state'])
country = (entry['country'])
我的预期结果:
city ='海洋'
state ='NJ'
等
这是错误:
addressinfo = json.loads(data2)['trackDetails'] ['shipToAddress']
TypeError:列表索引必须是整数或切片,而不是str
答案 0 :(得分:4)
请注意您的JSON格式:
city = data['trackDetails'][0]['shipToAddress']['city']
state = data['trackDetails'][0]['shipToAddress']['state']
您要索引的字典实际上包含在列表中(请注意方括号)。访问'trackDetails': [{
...
'shipToAddress': {...}
}]
字段的正确方法是:
shipToAddress
代替您的工作。
答案 1 :(得分:1)
当您返回io_context
时,您应该改用data = response.text
,因为它是json。这将允许您像json一样访问它。相反,您是使用data = response.json()
将其转换为字符串,然后尝试将其加载回不必要的位置。
然后访问城市:
.text