我是Python的新手,我正在尝试使用Python解析Json文件。 JSON 文件是嵌套文件。当我尝试精确执行"conversation_id"项时,包含此项的列表和上面的列表有时可能是空的。我希望将空列表替换为字符串"N/A",否则抓住该项目。我使用的代码如下:
for log in data['logs']:
print("Processing log "+log['log_id'])
logcolumns=[]
if log['request'] is None:
logcolumns.append("N/A")
elif log['request']['context'] is None:
logcolumns.append("N/A")
else:
logcolumns.append(log['request']['context']['conversation_id'])
try:
print("t".join(logcolumns),file = conv_tsv)
except KeyError:pass
del logcolumns
我得到的回溯错误是
Processing log cafa1077-f479-4c55-ac34-3bc3ebbb41fc
Traceback (most recent call last):
File "conversation_log_2.py", line 43, in <module>
logcolumns.append(log['request']['context']['conversation_id'])
KeyError: 'conversation_id'
与此日志 ID 关联的"请求"列表在 json 文件中如下所示:
{"request": {"input": {}, "context": {}},
完整的请求列表如下所示:
{"request": {"input": {"text": "haha"}, "context": {"conversation_id": "328d2320-f488-4f46-b71f-6cdfb1b79106", "system": {"dialog_stack": [{"dialog_node_s": "root"}], "dialog_turn_counter": 1, "dialog_request_counter": 1, "_node_output_map_s": "{"Welcome":[0,1,0]}", "branch_exited_s": "true", "branch_exited_reason_s": "completed"}}},
当我转到输出文件时,这是conv.tsv
,输出中有N/A
。
你似乎对语法很感兴趣。try/except
应该包裹if/elif
吗?你真的想要if/elif
吗?
请注意,log['request'] is None
不会测试键的值是否为空字典。
可以使用在找不到键时返回默认值的.get
方法:
logcolumns.append(log.get('request', {}).get('context', {}).get('conversation', 'N/A'))
或者更好的是,如果缺少任何键,请使用try/except
附加默认值:
try:
logcolumns.append(log['request']['context']['conversation_id'])
except KeyError:
logcolumns.append('N/A')