JSON 是否有允许访问父节点并具有多选的查询语言?
Is there a query language for JSON which allow access to parent node and has multiselect?
JSON 有许多查询语言,例如 JMES Path 和 JSON Path,但我发现其中的 none 使我感兴趣,例如JSON Path 不允许多选查询(我不能 return 具有不同类型元素 [car, plane, boat] 的列表)并且 JMES Path 与 JSON 相比真的更简单路径并允许多选但不允许访问父节点,例如 .. 或 parent(@) 或 $(for the source)。
所以我想要一种可以同时做到这两点的语言,如果它可能是一种像 JMES Path 这样简单的查询语言,但如果只有一种,而且它是最难的一种,那没关系,我会接受它!
PS: 我在 javascript 工作!
jq 是一种 JSON 查询语言,与 JSONPath 有一些相似之处,但具有 Turing-complete 编程语言的全部通用性。 jq
包含所有 JSON,它的许多构造是 JSON-like。 JSON个数组的组成没有限制。
在 jq 中可以处理涉及 "parents" 和 "children" 的问题的一种方法是使用 jq 路径,它只不过是 JSON 数组,其所有元素都是JSON 字符串(对应键名)或整数(对应数组的索引)。因此,如果 $p
是 JSON 文档的某些 sub-component 的路径,那么其 parent 的路径将是 $p[:-1]
。
不过在实践中,许多涉及 parents and/or children 的问题可以在不使用完整路径的情况下更容易地解决。请特别注意 to_entries
可以与 JSON objects 和 JSON 数组一起使用。
资源
main website 包括教程、手册和 Wiki,其中包含常见问题解答、食谱、"Language Description" 和 JSONPath 用户指南。
在 Whosebug 上,目前有超过 2,000 个问题带有 jq 标签。另见 http://rosettacode.org/wiki/Category:Jq
看看object-scan。它似乎与您的要求相关,因为它提供了很大的灵活性并可以访问大量节点元信息,例如 parents。自述文件中有更多示例,但这里有一个基本的示例可以让您了解一下
// 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' ] ]
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@13.7.1"></script>
免责声明:我是object-scan
的作者
JSON 有许多查询语言,例如 JMES Path 和 JSON Path,但我发现其中的 none 使我感兴趣,例如JSON Path 不允许多选查询(我不能 return 具有不同类型元素 [car, plane, boat] 的列表)并且 JMES Path 与 JSON 相比真的更简单路径并允许多选但不允许访问父节点,例如 .. 或 parent(@) 或 $(for the source)。 所以我想要一种可以同时做到这两点的语言,如果它可能是一种像 JMES Path 这样简单的查询语言,但如果只有一种,而且它是最难的一种,那没关系,我会接受它!
PS: 我在 javascript 工作!
jq 是一种 JSON 查询语言,与 JSONPath 有一些相似之处,但具有 Turing-complete 编程语言的全部通用性。 jq
包含所有 JSON,它的许多构造是 JSON-like。 JSON个数组的组成没有限制。
在 jq 中可以处理涉及 "parents" 和 "children" 的问题的一种方法是使用 jq 路径,它只不过是 JSON 数组,其所有元素都是JSON 字符串(对应键名)或整数(对应数组的索引)。因此,如果 $p
是 JSON 文档的某些 sub-component 的路径,那么其 parent 的路径将是 $p[:-1]
。
不过在实践中,许多涉及 parents and/or children 的问题可以在不使用完整路径的情况下更容易地解决。请特别注意 to_entries
可以与 JSON objects 和 JSON 数组一起使用。
资源
main website 包括教程、手册和 Wiki,其中包含常见问题解答、食谱、"Language Description" 和 JSONPath 用户指南。
在 Whosebug 上,目前有超过 2,000 个问题带有 jq 标签。另见 http://rosettacode.org/wiki/Category:Jq
看看object-scan。它似乎与您的要求相关,因为它提供了很大的灵活性并可以访问大量节点元信息,例如 parents。自述文件中有更多示例,但这里有一个基本的示例可以让您了解一下
// 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' ] ]
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@13.7.1"></script>
免责声明:我是object-scan
的作者