有许多JSON查询语言,例如JMES Path和JSON Path,但我发现没有一种对我感兴趣,例如JSON Path不允许多选查询(我无法返回具有不同类型元素[汽车,飞机,船艇]的列表),并且与JSON Path相比,JMES Path确实更简单,并且允许多选,但不允许访问到父节点,例如..或parent(@)或$(作为源)。 因此,我希望一种语言能够同时实现这两种语言,如果可能的话,它是一种简单的查询语言,例如JMES Path,但是如果只有一种并且是最困难的一种语言,那么我会接受的!
PS:我使用JavaScript!
答案 0 :(得分:1)
jq是一种JSON查询语言,与JSONPath相似,但具有图灵完备的编程语言的全部通用性。 jq
包含所有JSON,并且其许多构造类似于JSON。
使用jq路径可以解决涉及“父母”和“孩子”的问题的一种方法是使用jq路径,除了JSON数组之外,这些路径的所有元素都是JSON字符串(对应于键名)或整数(对应于数组的索引)。因此,如果$p
是JSON文档某些子组件的路径,则其父级的路径将是$p[:-1]
。但是实际上,在不使用完整路径的情况下,可以更轻松地解决涉及父母和/或孩子的许多问题。
main website包括一个教程,手册和一个Wiki,其中包含FAQ,食谱,“语言描述”以及JSONPath用户指南。
在stackoverflow上,目前有2,000多个带有jq标签的问题。另请参见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' ] ]