使用字典进行json解析

2024-06-28 20:42:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个json文件,如下所示: 我将不得不提取事件,例如“应用程序启动”“定向”等

{u'ParamElement_ReceivedTime': u'2012-11-02-00-05-31-748', 
 u'ParamElement_Name': u'LOG_CONTENT', 
 u'ParamElement_Info_0': 
                 {u'dict': 
                      {u'Events_list': [
                          {
                           u'Event': u'APP_STARTED', 
                           u'time': u'2012-11-01 20:00:59.565 -0400'}, 
                          {
                            u'time': u'2012-11-01 20:01:01.168 -0400', 
                            u'Event': u'ORIENTATION', 
                            u'Orientation': u'Portrait'}, 

                          {u'Event': u'CLIENT_RESULT_RECEIVED', 
                           u'time': u'2012-11-01 20:01:15.927 -0400'}, 

                          {u'Prev_SessionID': u'802911CC329E47139B61B58E21BF2FFF', 
                           u'Prev_TransactionID': u'2', 
                           u'Tab_Index': u'5', 
                           u'time': u'2012-11-01 20:01:15.941 -0400', 
                           u'Event': u'RESOLVED_TAB', 
                           u'Accuracy': u'5.000000'}, 

                          {u'Prev_TransactionID': u'2', 
                           u'Prev_SessionID': u'802911CC329E47139B61B58E21BF2FFF', 
                           u'Event': u'CLIENT_RESULT_RECEIVED', 
                           u'time': u'2012-11-01 20:01:16.568 -0400'}
                    }

整个过程都存储在一个名为event_dict的变量中。 我有一个代码,看起来像:

^{pr2}$

可能是什么错误?在


Tags: 文件clienteventjson应用程序time事件result
3条回答

永远不要定义变量e:最后一行应该是一个循环,而不是像前面的行那样是一个条件:

for e in event_dict['ParamElement_Info_0']['dict']['el']:
    print e

另外,我认为当你需要说"Events_list"时,你应该说"el",并做出正确的代码:

^{pr2}$

你的字典里没有“el”元素。当你写一个for A in B时,你正在创建一个变量a来保存iterable B的内容。。。事实并非如此,但事件清单正如@David所指出的那样。在

下面是一个更简单的方法。在

def item_getter(struct, key):
    parts = key.split('.', 1)
    if len(parts) > 1:
        key_part, rest_part = parts
        return item_getter(struct.get(key_part, {}), rest_part)
    return struct.get(key, None)

items = item_getter(event_dict, "ParamElement_Info_0.dict.Events_list")
events = [item.get('Event', 'No Event') for item in items]
print events

输出

^{pr2}$

Python方法是请求原谅,而不是权限,而且使用try-catch块而不是{}更容易更好,除非condition fail必须单独处理。在

try:
    event = event_dict['ParamElement_Info_0']['dict']['Events_list']
except Exception, e:
    log('Opsss, incorrect data format: %s' % e.message)

这样,你就可以很容易地看到你的错误。在

相关问题 更多 >