我有一个jsonpaths的列表(不知何故“行为良好”),我必须返回一个只包含列表中描述的元素的对象。例如,给定列表["$.a.a2", $.c]
和对象
{
"a": {"a1": 1, "a2": 2},
"b": foo,
"c": []
}
期望的结果是
{
"a": {"a2": 2},
"c": []
}
我正在使用Jayway Jsonpath,但我愿意使用其他库。我目前的解决方案如下:
- 找到描述同一组元素的最小jsonpath列表(即如果
"$.a"
存在,则移除"$.a.a2"
); - 确定叶子对象(在第一个例子中为
a2
和c
),并构建一个能够包含它们的Map,因为深度节点的创建仍然是not supported:在第一个例子中,在这一步之后,我创建了一个Map{"a": {}}
; - 从初始对象读取值,并使用提供的方法
read
/set
将它们复制到Map中。
我很惊讶,这样的功能是不存在的。是否有更好的方法来过滤对象中的属性?Squiggly可能是一个合适的解决方案,但没有被维护。
1条答案
按热度按时间2izufjch1#
您可以尝试另一个JSON库 * Josson *,使用查询表达式和函数
map()
。https://github.com/octomix/josson
您可以将JSON输出的结构与这个重新格式化的查询表达式进行比较: