Python 解析 Json - "X is None" 不捕获空对象
Python parsing Json - "X is None" doesn't catch empty objects
我是 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 关联的 "request" 列表在 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
方法,当找不到密钥时 returns 默认值:
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')
我是 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 关联的 "request" 列表在 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
方法,当找不到密钥时 returns 默认值:
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')