У меня есть этот простой скрипт Python, он должен быть частью чего-то большего, я просто не могу понять, как работать с jmespath
#!/usr/bin/env python
import jmespath
if __name__ == '__main__':
# input json
text = \
{
'topology': [
{
'node': [
{
'topology-stats:session-state': {
'synchronized': True,
'local-pref': {
'session-id': 0,
'deadtimer': 120,
'ip-address': '10.30.170.187',
'keepalive': 30
},
'messages': {
'stateful-stats:sent-upd-msg-count': 1,
'last-sent-msg-timestamp': 1513334157,
'stateful-stats:last-received-rpt-msg-timestamp': 1513334157,
'unknown-msg-received': 0,
'stateful-stats:received-rpt-msg-count': 3,
'reply-time': {
'max-time': 77,
'average-time': 77,
'min-time': 77
},
'stateful-stats:sent-init-msg-count': 0,
'sent-msg-count': 1,
'received-msg-count': 3
},
'session-duration': '0:00:00:12'
},
'node-id': '10.30.170.117'
}
],
'topology-id': 'asdf-topology'
}
]
}
exp = jmespath.compile('''topology[*].node[?'topology-stats:session-state' != 'session-duration'][]''')
result = exp.search(text)
print result
Я хочу в основном удалить строки с ключами, которые имеют непредсказуемые значения (в идеальном мире я бы переключил значение на что-то общее), например: last-sent-msg-timestamp, session-duration, stateful-stats: last-receive- rpt-сообщение-отметка времени. И в совершенстве я хотел бы сохранить все остальное, хотя могу жить с потерей топологии и тегов узлов.
Дело в том, что я могу использовать только один jmespath.search и могу выполнить только одно выражение jmespath. Также я не могу использовать что-либо еще из Python - этот скрипт просто пример.
Возможно ли это с помощью jmespath? В настоящее время это мой лучший вариант из-за ограничений проекта.