首页 > 解决方案 > 如果一个字段不存在,如何在 JSON 中跳过?

问题描述

我有如下 JSON 文件,我必须跳过"channels"哪个是空的或不存在的。如何在python中实现?

[
  {
    "account": "fcbc9098c4",
    "name": "test-everything",
    "apps": [
      "messages",
      "kubelet.service"
    ],
    "category": [],
    "viewid": "3fddf26cb4",
    "channels": [
      {
        "integration": "email",
        "immediate": false,
        "terminal": true,
        "triggerlimit": 1,
        "triggerinterval": "30m",
        "operator": "presence",
        "emails": [
          "yugendhar.reddy.jakkidi@****.com"
        ],
        "alertid": "dd317339ad"
      }
    ],
    "presetids": []
  },
  {
    "viewid": "0df42550ee",
    "name": "test - system logs",
    "apps": [
      "kubelet.service",
      "kernel",
      "messages",
      "audit.log",
      "auditd",
      "crio"
    ],
    "category": [],
    "account": "fcbc9098c4"
  }
]

我正在阅读python中的文件,如下所示...

import os
import requests
import json
import sys

filename=open(r"/home/yugendhar.jakkidi/viewsLogdna.json")
data = json.load(filename)
for i in data:
    print(i['name'],i['apps'],i['viewid'])

我想要的输出应该如下,因为它有"channels"

 {
    "account": "fcbc9098c4",
    "name": "test-everything",
    "apps": [
      "messages",
      "kubelet.service"
    ],
    "category": [],
    "viewid": "3fddf26cb4",
    "channels": [
      {
        "integration": "email",
        "immediate": false,
        "terminal": true,
        "triggerlimit": 1,
        "triggerinterval": "30m",
        "operator": "presence",
        "emails": [
          "yugendhar.reddy.jakkidi@****.com"
        ],
        "alertid": "dd317339ad"
      }
    ],
    "presetids": []
  },

标签: python

解决方案


尝试使用 json 列表。

import os
import requests
import json
import sys

filename=open(r"/home/yugendhar.jakkidi/viewsLogdna.json")
data = json.load(filename)

len = len(data)
n = 0
while n < len:
    try:
        data_channels = data[n]["channels"]
        print(data[n])
    except:
        print("channels not there")
    
    if n ==(len):
        break
    n +=1

** 输出 **

{
    "account": "fcbc9098c4",
    "name": "test-everything",
    "apps": [
      "messages",
      "kubelet.service"
    ],
    "category": [],
    "viewid": "3fddf26cb4",
    "channels": [
      {
        "integration": "email",
        "immediate": false,
        "terminal": true,
        "triggerlimit": 1,
        "triggerinterval": "30m",
        "operator": "presence",
        "emails": [
          "yugendhar.reddy.jakkidi@ibm.com"
        ],
        "alertid": "dd317339ad"
      }
    ],
    "presetids": []
  }


推荐阅读