从Json数据中提取信息

时间:2019-04-16 18:24:53

标签: python

  

问题:

我无法获取一些信息。 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

2 个答案:

答案 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