使用Python解析Json文件时出现关键错误

时间:2019-06-20 11:32:56

标签: python json pandas

我们将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"
                }
              ]
            }
          }
        ]
      }
    }
   }
  }
 ]

 }

1 个答案:

答案 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是任意变量。

希望这会有所帮助。