2015-07-20 2 views
0

Не могли бы вы помочь с посоветуйте :)
У меня есть файл в формате JSON как:питон: фильтр сложный файл JSon

{ 
content: { 
hostname01: { 
active_checks_enabled: "1", 
current_attempt: "1", 
plugin_output: "SSH OK", 
services: { 
    monitoring: { 
     active_checks_enabled: "0", 
     current_attempt: "1", 
     current_state: "0", 
     downtimes: { }, 
     plugin_output: "PASV MONITORNG OK", 
     last_check: "1437382990", 
     problem_has_been_acknowledged: "0", 
     } 
}, 
comments: { }, 
last_notification: "0", 
max_attempts: "5" 
}, 

как я могу отформатировать этот большой файл, так что я только объект, как:

{ 
hostname01:{ 
    monitoring: { 
    current_state: "1" 
    } 
} 
} 

Существует два возможных текущего состояния: 0, 1. Заранее благодарю вас!

+0

Ваш JSON-файл недействителен - отсутствуют два закрывающих фигурных скобки, а в действительных ключах JSON нужно заключить в двойные кавычки '' – Finwood

+0

. Рассмотрите возможность установки принятого ответа, если это поможет с вашим вопросом. – adrianus

ответ

0

С valid JSON входом, вы можете прочитать данные с помощью модуля json (я предполагаю из файла, здесь я просто положить его в код):

import json 

json_data = """ 
{ 
    "content": { 
     "hostname01": { 
      "active_checks_enabled": "1", 
      "current_attempt": "1", 
      "plugin_output": "SSH OK", 
      "services": { 
       "monitoring": { 
        "active_checks_enabled": "0", 
        "current_attempt": "1", 
        "current_state": "0", 
        "downtimes": {}, 
        "plugin_output": "PASV MONITORNG OK", 
        "last_check": "1437382990", 
        "problem_has_been_acknowledged": "0" 
       } 
      }, 
      "comments": {}, 
      "last_notification": "0", 
      "max_attempts": "5" 
     } 
    } 
} 
""" 

data = json.loads(json_data) 

Затем Переберите и сохранить имена хостов значение от current_state.

reduced_data = {} 
for hostname in data["content"]: 
    current_state = data["content"][hostname]["services"]["monitoring"]["current_state"] 
    reduced_data[hostname] = {"monitoring": {"current_state": current_state}} 

print json.dumps(reduced_data, sort_keys=True, indent=4, separators=(',', ': ')) 

Выход:

{ 
    "hostname01": { 
     "monitoring": { 
      "current_state": "0" 
     } 
    } 
} 

Вы должны гарантировать, что все hostname узлы имеют ту же структуру, или еще ловить и обрабатывать KeyError исключения.

+0

Спасибо большое !!!! :)))) оно работает! Огромное спасибо вам за один раз – Iana

+0

Добро пожаловать! Рассмотрите возможность опроса или настройки в качестве принятого ответа, если это вам помогло :-) – adrianus

Смежные вопросы