首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jmespath过滤掉Json

用jmespath过滤掉Json
EN

Stack Overflow用户
提问于 2017-12-15 15:42:59
回答 1查看 2.3K关注 0票数 0

我有一个简单的Python脚本,它应该是一些更大的东西的一部分,我只是想不出如何使用jmespath。

代码语言:javascript
复制
#!/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

我想要的基本上是删除那些具有不可预测值的键行(在完美的世界中,我会切换一些通用的值),比如:最后发送-msg-时间戳,会话持续时间,stateful-stats:last-received-rpt-msg-timestamp.。而且,我非常希望保留其他的一切,尽管我可以忍受松散的拓扑和节点标记。

问题是,我只能使用,只有一个jmespath.search,我只能执行一个jmespath表达式。另外,我不能使用Python中的任何其他内容--这个脚本只是一个例子。

用jmespath能做到这一点吗?由于项目的限制,这是我目前最好的选择。

EN

回答 1

Stack Overflow用户

发布于 2018-04-18 11:00:24

当前无法使用Jmespath删除字段。有一个挂起的特性请求:

基于jmespath #121 https://github.com/jmespath/jmespath.py/issues/121设置和删除的能力

我用jq来做这件事:

代码语言:javascript
复制
jq 'del(.foo)'
Input   {"foo": 42, "bar": 9001, "baz": 42}
Output  {"bar": 9001, "baz": 42}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47835591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档