我有一个如下所示的json文件: 我将不得不提取事件,例如。 'APP_STARTED''ORIENTATION'等
{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的变量中。 我有一个看起来像的代码:
if event_dict:
if 'dict' in event_dict['ParamElement_Info_0']:
if 'el' in event_dict['ParamElement_Info_0']['dict']:
if 'e' in event_dict['ParamElement_Info_0']['dict']['el']:
print e['Event']
可能是什么错误?
答案 0 :(得分:3)
Python方法 请求宽恕,而不是权限 ,使用try-catch
块代替condition checks
更容易也更好,除非{{ 1}}必须单独处理。
condition fail
通过这种方式,您可以轻松查看错误。
答案 1 :(得分:2)
你永远不会定义变量e
:你的最后一行应该是一个循环,不是一个条件就像前面的行一样:
for e in event_dict['ParamElement_Info_0']['dict']['el']:
print e
此外,当您需要说"el"
时,我想你说"Events_list"
,并提出更正的代码:
if event_dict:
if 'dict' in event_dict['ParamElement_Info_0']:
if 'Events_list' in event_dict['ParamElement_Info_0']['dict']:
for e in event_dict['ParamElement_Info_0']['dict']['Events_list']:
print e
答案 2 :(得分:2)
词典中没有'el'元素。当您编写for A in B
时,您正在创建一个变量A来保存可迭代B的内容。您正在做的是,如果键'el'在我的字典中......它不是。但是Events_list正如@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
<强>输出强>
[u'APP_STARTED', u'ORIENTATION', u'CLIENT_RESULT_RECEIVED', u'RESOLVED_TAB', u'CLIENT_RESULT_RECEIVED']