是否有用于JSON的查询语言,该语言允许访问父节点并具有多选功能?

时间:2019-06-03 22:44:33

标签: json jsonpath jmespath

有许多JSON查询语言,例如JMES Path和JSON Path,但我发现没有一种对我感兴趣,例如JSON Path不允许多选查询(我无法返回具有不同类型元素[汽车,飞机,船艇]的列表),并且与JSON Path相比,JMES Path确实更简单,并且允许多选,但不允许访问到父节点,例如..或parent(@)或$(作为源)。 因此,我希望一种语言能够同时实现这两种语言,如果可能的话,它是一种简单的查询语言,例如JMES Path,但是如果只有一种并且是最困难的一种语言,那么我会接受的!

PS:我使用JavaScript!

2 个答案:

答案 0 :(得分:1)

是一种JSON查询语言,与JSONPath相似,但具有图灵完备的编程语言的全部通用性。 jq包含所有JSON,并且其许多构造类似于JSON。

使用jq路径可以解决涉及“父母”和“孩子”的问题的一种方法是使用jq路径,除了JSON数组之外,这些路径的所有元素都是JSON字符串(对应于键名)或整数(对应于数组的索引)。因此,如果$p是JSON文档某些子组件的路径,则其父级的路径将是$p[:-1]。但是实际上,在不使用完整路径的情况下,可以更轻松地解决涉及父母和/或孩子的许多问题。

资源

main website包括一个教程,手册和一个Wiki,其中包含FAQ,食谱,“语言描述”以及JSONPath用户指南。

在stackoverflow上,目前有2,000多个带有标签的问题。另请参见http://rosettacode.org/wiki/Category:Jq

答案 1 :(得分:0)

看看object-scan。这似乎与您的要求有关,因为它具有很大的灵活性,并且可以访问许多节点元信息,例如父级。自述文件中有更多示例,但这是一个基本的示例,可以为您提供一个想法

const objectScan = require('object-scan');

const data = {
  a: {
    b: 'c'
  },
  d: ['e', 'f']
};

const r = objectScan(['*.b', 'd[*]'], {
  filterFn: ({ value }) => ['c', 'f'].includes(value)
})(data);
console.log(r);
// => [ [ 'd', 1 ], [ 'a', 'b' ] ]