我们将Source作为Json File,我们正在尝试解析数据并创建输出CSV文件
在某些情况下,我们没有收到Json文件中的某些属性。
当我尝试使用下面的代码来获取长度及其值时,我收到了“ Key Error”。下面是我的代码。
for j in range(len(json_file['entity'][i]['data']['attrb']['DEPT']['group'])):
for key in json_file['entity'][i]['data']['attrb']['DEPT']['group'][j].keys():
try:
temp[key] = json_file['entity'][i]['data']['attrb']['DEPT']['group'][j][key]['values'][0]['value']
except:
temp[key] = None
['entity'][i]['data']['attrb']
将始终可用,但是对于某些'DEPT'
文件,json
我可能没有。
错误:
“关键错误:找不到'DEPT'”。
我该如何克服这个问题,请提出任何建议。
请在下面找到示例数据。
{
"entity": [
{
"data": {
"attrb": {
"DEPT": {
"group": [
{
"DEPTID": {
"values": [
{
"value": "D12345"
}
]
},
"DEPTNO": {
"values": [
{
"value": "302222201"
}
]
}
}
]
}
}
}
}
]
}
答案 0 :(得分:0)
让我们一步一步地分解它。
您的字符串是
import json
json_string = '''{
"entity": [
{
"data": {
"attrb": {
"DEPT": {
"group": [
{
"DEPTID": {
"values": [
{
"value": "D12345"
}
]
},
"DEPTNO": {
"values": [
{
"value": "302222201"
}
]
}
}
]
}
}
}
}
]
}'''
和生成的json字典:
test = json.loads(json_string)
首先,返回所有属性(假定“ attrib”为有效键)。
attribs = [test['entity'][i]['data']['attrb'] for i in range(len(test['entity']))]
现在属性输出为
>>> attribs
[{'DEPT': {'group': [{'DEPTID': {'values': [{'value': 'D12345'}]},
'DEPTNO': {'values': [{'value': '302222201'}]}}]}}]
随后,正如您提到的,“ DEPT”可能是有效密钥,也可能不是有效密钥。从这一点开始,我们使用de dict.get方法:
dept = attribs[0].get('DEPT')
>>> dept
{'group': [{'DEPTID': {'values': [{'value': 'D12345'}]},
'DEPTNO': {'values': [{'value': '302222201'}]}}]}
但是,如果'DEPT'不是有效的密钥,则get('DEPT')将返回None:
_dict= {}
>>> print(_dict.get('DEPT'))
None
或者,您是否希望返回除None以外的其他默认值,那么您将
_dict.get('DEPT', your_default_value)
其中your_default_value是任意变量。
希望这会有所帮助。