如何用ObjectPath获取未知键名?附JMESPath实现对比
使用ObjectPath获取对象路径中的未知键名
嘿,这事儿好办!针对你给出的groups结构,ObjectPath里有对应的方法来获取那些动态的键名,和JMESPath的keys(@)用法逻辑一致,具体看下面的说明:
首先先明确你的目标数据结构:
{ "groups": { "800": { "short_name": "22", "oname": "11", "group": 8, "title": "SS", "name": "33", "onames": [""], "alt_name": false, "waytype": 1, "multiple": 1, "primary": 1 }, "801": { "short_name": "ss", "oname": "zz", "group": 8, "title": "ss", "name": "bbb", "onames": [""], "alt_name": false, "waytype": 1, "multiple": 1, "primary": 0 } } }
核心查询表达式
要获取groups下的所有未知键名(也就是["800", "801"]),直接使用ObjectPath的keys()函数即可,对应的表达式是:
$.groups.keys()
这个表达式会直接返回目标对象的所有键名组成的数组,完全满足你的需求。如果你的查询上下文已经定位到了groups节点内部,也可以简化为keys(@),和JMESPath的用法完全对应。
实际代码示例(以Python的objectpath库为例)
如果是在代码里实际调用,你可以这么写:
import objectpath import json # 加载你的数据 data = json.loads('''{ "groups": { "800": { "short_name": "22", "oname": "11", "group": 8, "title": "SS", "name": "33", "onames": [""], "alt_name": false, "waytype": 1, "multiple": 1, "primary": 1 }, "801": { "short_name": "ss", "oname": "zz", "group": 8, "title": "ss", "name": "bbb", "onames": [""], "alt_name": false, "waytype": 1, "multiple": 1, "primary": 0 } } }''') # 创建ObjectPath树结构 tree = objectpath.Tree(data) # 执行查询并获取结果 result = list(tree.execute('$.groups.keys()')) print(result) # 输出: ['800', '801']
这样就能轻松拿到你需要的动态键名啦!
内容的提问来源于stack exchange,提问作者abruski
相关产品推荐
相关产品推荐

