2014-09-01 124 views
0

以下是我拥有的代码片段。TypeError:列表索引必须是整数,而不是来自JSON文件的str

  fullsrcurl = self.srcjson + format_type + '&jobname=' + joburl 
      srcfile = urllib2.urlopen(fullsrcurl) 
      if self.format_export == 'json': 
       srcdata = json.load(srcfile) 
       pprint(srcdata) 
       srcjobmst_id = srcdata["jobmst_id"][0] 

我试图与上面的代码做的是从被返回的JSON,并得到来自JSON的“jobmst_id”值的API网址读取。 pprint(srcdata提供了下面的json),我想从中提取jobmst_id的值,在下面的例子中这个值是'58908'。我很乐意将它作为一个可以转换的整数,但是现在它依然没有按照主题中的错误行事。

下面是JSON -

[{u'evntmst_id': {u'evntmst_calendar': 0, 
        u'evntmst_crttm': u'2009-12-04T11:22:03', 
        u'evntmst_desc': None, 
        u'evntmst_fiscal': 0, 
        u'evntmst_frcstdt': u'2012-12-31T00:00:00', 
        u'evntmst_freq': 1, 
        u'evntmst_fromdt': None, 
        u'evntmst_id': 1, 
        u'evntmst_intsect': u'N', 
        u'evntmst_lstchgtm': u'2009-12-04T12:28:52', 
        u'evntmst_lstcmptm': u'2014-08-28T12:00:29', 
        u'evntmst_monthdays': u'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY', 
        u'evntmst_months': u'YYYYYYYYYYYY', 
        u'evntmst_name': u'Daily 
       ', 
        u'evntmst_occur': 0, 
        u'evntmst_offset': 0, 
        u'evntmst_owner': 2, 
        u'evntmst_public': u'Y', 
        u'evntmst_subtype': None, 
        u'evntmst_timeframe': 0, 
        u'evntmst_totcnt': None, 
        u'evntmst_type': 2, 
        u'evntmst_untildt': u'2012-12-31T00:00:00', 
        u'evntmst_weekdays': u'YYYYYYY', 
        u'evntmst_weeks': u'NNNNN'}, 
    u'job_dependencies': [], 
    u'job_events': [], 
    u'jobcls_id': None, 
    u'jobdtl_id': {u'jobdtl_abrtonclderr': None, 
       u'jobdtl_allowadhoc': u'Y', 
       u'jobdtl_carryover': 1, 
       u'jobdtl_cmd': None, 
       u'jobdtl_concur': 1, 
       u'jobdtl_deplogic': 1, 
       u'jobdtl_deprerun': u'N', 
       u'jobdtl_duration': 67, 
       u'jobdtl_envfile': None, 
       u'jobdtl_estdurexclude': 4, 
       u'jobdtl_estmethod': 1, 
       u'jobdtl_extinfo': None, 
       u'jobdtl_failalarm': None, 
       u'jobdtl_fromdt': u'2012-11-22T00:00:00', 
       u'jobdtl_fromtm': u'1899-12-30T23:30:00', 
       u'jobdtl_id': 58908, 
       u'jobdtl_inhagent': u'N', 
       u'jobdtl_inhevent': u'N', 
       u'jobdtl_inhoptions': u'N', 
       u'jobdtl_inhrepeat': u'N', 
       u'jobdtl_inhtime': u'N', 
       u'jobdtl_interval': None, 
       u'jobdtl_intervalcnt': None, 
       u'jobdtl_maxrun': 60, 
       u'jobdtl_minrun': 60, 
       u'jobdtl_nearoutage': 3, 
       u'jobdtl_normalexit': 0, 
       u'jobdtl_normalop': 1, 
       u'jobdtl_normalrange': 0, 
       u'jobdtl_outputname': None, 
       u'jobdtl_params': None, 
       u'jobdtl_priority': 50, 
       u'jobdtl_proxy': 4, 
       u'jobdtl_proxy2': None, 
       u'jobdtl_psjob': None, 
       u'jobdtl_rerun': None, 
       u'jobdtl_rerunok': u'Y', 
       u'jobdtl_retnsn': 30, 
       u'jobdtl_sapcount': None, 
       u'jobdtl_savelogonly': u'N', 
       u'jobdtl_saveoutput': u'Y', 
       u'jobdtl_statuscl': None, 
       u'jobdtl_timewin': 2, 
       u'jobdtl_trackcl': None, 
       u'jobdtl_trackcmd': None, 
       u'jobdtl_trackmethod': 1, 
       u'jobdtl_trxid': None, 
       u'jobdtl_unit': None, 
       u'jobdtl_untildt': u'1899-12-30T00:00:00', 
       u'jobdtl_untiltm': u'1899-12-30T23:50:00', 
       u'jobdtl_waitop': u'N', 
       u'jobdtl_workdir': None, 
       u'nodlstmst_id': 27, 
       u'nodmst_id': None, 
       u'servicemst_id': None}, 
    u'jobmst_active': u'Y', 
    u'jobmst_alias': u'58908  ', 
    u'jobmst_crttm': u'2012-11-22T12:22:59', 
    u'jobmst_desc': None, 
    u'jobmst_dirty': u' ', 
    u'jobmst_evntoffset': None, 
    u'jobmst_id': 58908, 
    u'jobmst_lstchgtm': u'2012-11-22T13:01:34', 
    u'jobmst_mode': 0, 
    u'jobmst_name': u'SWIFT DB Backup', 
    u'jobmst_owner': {u'owner_allagents': u'Y', 
        u'owner_id': 257, 
        u'owner_name': u'Common      ', 
        u'owner_type': 2}, 
    u'jobmst_prntid': None, 
    u'jobmst_prntname': None, 
    u'jobmst_type': 1, 
    u'runbook_url': None}] 
+1

你不包括JSON的开始,因为必须有一个开始}和]使其有效。这就回答了你的问题:它作为一个带有字典的列表来回放,而不仅仅是一本字典。你想做'srcdata [0] [“jobmst_id”]',而不是'jobmst_id [“jobmst_id”] [0]'。 – 2014-09-01 04:43:27

+0

json有效。我更新了完整的文件。我不得不削减它,因为它抱怨太多的代码。 – whoisearth 2014-09-01 05:03:03

回答

1

检索数据是srcdata[0]["jobmst_id"]而不是srcdata["jobmst_id"][0]的方式。

相关问题