@daz.is/jmespath

中文文档
1.3.1发布于 2020/07/01Apache-2.0CommonJS零依赖近 30 天下载 2429

JMESPath在javascript中的执行

中文使用文档
文档目录8 节
  1. 安装
  2. 福尔克
  3. 关于
  4. 添加自定义函数
  5. 仅按键的多选择哈什
  6. 可选函数参数
  7. JMESPATH + (英语)
  8. 更多资源

jmessath.js (英语)

Build Status

安装

npm install --save @daz.is/jmespath

福尔克

NB: 这是最初 JavaScript 执行的分叉 (原始内容存档于2018-09-26). of JMES Path. 原作现在被认为没有保存下来, 因此,这个叉增加了几个有用的特性:

  • 定义自定义函数
  • 缓存解析表达式
  • 使用$访问根元素

关于

jmessath.js是JMESPath的javascript执行程序, 这是 JSON 的查询语言。 这需要一个JSON 文档并将其转换为另一个 JSON 文档 通过 JMESPath 表达式.

使用jmespath.js 真的很容易。 只有一个功能 你用这个, jmespath.search数字 :

var jmespath = require('jmespath');
jmespath.search({foo: {bar: {baz: [0, 1, 2, 3, 4]}}}, "foo.bar.baz[2]")

// output = 2

举个例子 search 函数输入数据 {foo: {bar: {baz: [0, 1, 2, 3, 4]}}} 以及耶稣会 表达式 foo.bar.baz[2],则 search 评价的函数 以输入数据表示结果 2。 。 。 .

JMESPath 语言比选择一个元素可以做得多 从列表。 这里还有几个例子:

jmespath.search({foo: {bar: {baz: [0, 1, 2, 3, 4]}}}, "foo.bar")

// { baz: [ 0, 1, 2, 3, 4 ] }

jmespath.search({"foo": [{"first": "a", "last": "b"},
                           {"first": "c", "last": "d"}]},
                  "foo[*].first")

// [ 'a', 'c' ]

jmespath.search({"foo": [{"age": 20}, {"age": 25},
                           {"age": 30}, {"age": 35},
                           {"age": 40}]},
                  "foo[?age > `30`]")

// [ { age: 35 }, { age: 40 } ]

添加自定义函数

自定义函数可以通过使用 decorate() 函数 :

function customFunc(resolvedArgs) {
  return resolvedArgs[0] + 99;
}
var extraFunctions = {
  custom: {_func: customFunc, _signature: [{types: [jmespath.types.TYPE_NUMBER]}]},
};
jmespath.decorate(extraFunctions);

装饰函数返回的值是一个曲折函数 (一次取一个参数) 使用搜索表达式 首先查找数据作为第二个参数:

var value = jmespath.decorate(extraFunctions)('custom(`1`)')({})
// value = 100

因为返回值来自 decorate() 是曲折函数 编辑表达式的结果可以缓存和运行 与不同数据相对的多倍数 :

var expr = jmespath.decorate({})('a');
// expr is now a cached compiled version of the search expression
var value = expr({ a: 1 });
assert.strictEqual(value, 1);
value = expr({ a: 2 });
assert.strictEqual(value, 2);

仅按键的多选择哈什

我稍微修改了语法 允许多选择散列 仅使用密钥指定.

var data = { one: 'first',  two: 'second' };
var result = jmespath.search(data, '{ one }');
strictDeepEqual(result, { one: 'first' });

可选函数参数

最新版本(v1.3)增加了功能能力 (包括通过 decorate拥有 备选参数。 要激活这个, 设置 optional: true 在函数签名中.

JMESPATH + (英语)

对于更多自定义功能的例子, 和收缩洛达什, 见 JMESPATH + (英语)。 。 。 .

更多资源

上面的例子只显示少量 a JMESPath表达式可以。 如果你想要一个 游览语言 最好,我说 地点是 JMESPATH 教学。 。 。 .

JMESPath的最好之处之一是 以许多不同的编程语言执行,包括 p,红宝石,php,lua等. 要看到完整的图书馆列表, 检查出来 JMESPath 库页面。 。 。 .

最后,可以找到JMESPath的全部规格 编辑 JMESPath 站点。 。 。 .

版本与发布记录

@daz.is/jmespath 共发布 9 个版本,首次发布于 2020/02/28;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.3.1latest2020/07/016 年前
1.3.02020/07/016 年前
1.2.12020/06/306 年前
1.2.02020/06/306 年前
1.1.22020/02/286 年前
1.1.12020/02/286 年前

关于 @daz.is/jmespath 的常见问题

@daz.is/jmespath 是什么?

JMESPath在javascript中的执行

如何安装 @daz.is/jmespath?

在项目目录运行 npm install @daz.is/jmespath,或使用 pnpm add / yarn add / bun add。

@daz.is/jmespath 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/daz.is__jmespath 是否存在。

@daz.is/jmespath 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@daz.is/jmespath 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 0.6.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@daz.is/jmespath 可以商用吗?

@daz.is/jmespath 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@daz.is/jmespath 的下载量有多少?

根据 npm 官方下载统计,@daz.is/jmespath 在 2026/10/12 – 2026/11/10 这 30 天内被下载 2,429 次,日均约 81 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@daz.is/jmespath 还在维护吗?

最新版本 1.3.1 发布于 2020/07/01(6 年前);至今共发布 9 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/02/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。