Dasel 挑战 jq 与 yq,一键玩转 JSON、YAML、TOML、XML 和 CSV

文摘   2024-08-19 00:01   江苏  

Dasel 挑战 jq 与 yq,一键玩转 JSON、YAML、TOML、XML 和 CSV

在这个数字化的时代,数据结构就像是一个多面手,它既能变身为灵活多变的 JSON,又能优雅地成为 YAML,甚至还能以 TOML、XML 和 CSV 的形态出现。但无论它怎么变,我们总有那么一个“神器”——Dasel,能够轻松地驾驭它们。就像孙悟空的如意金箍棒,无论七十二变,都能一棒定音!

Dasel,一个能让您在数据的海洋中畅游无阻的“小舟”,它以简洁而强大的选择器语法,让您对数据的操作变得游刃有余。忘掉那些繁琐的工具学习吧,Dasel 就是您的“一招鲜”,无论是查询、修改还是转换数据格式,都能一气呵成,轻松搞定。

而且,Dasel 还是个“环保小能手”,零运行时依赖,轻装上阵,让您的数据操作更加流畅。它不仅是个多面手,还是个“速度小王子”,在性能测试中,它的速度可是让 jq 和 yq 都望尘莫及的。

所以,别犹豫了,快来体验一下 Dasel 的魔力,让我们在数据的世界里,一起“一棒走天涯”!

Dasel(数据选择器的简称)允许您使用选择器字符串查询和修改数据结构。

jq[1]/yq[2]相似,但支持 JSON、YAML、TOML、XML 和 CSV 格式,且无需任何运行时依赖。

一工具统领所有

告别因处理不同数据格式而学习新工具的日子。

Dasel 无论数据格式如何,都使用标准的选择器语法。这意味着一旦您学会使用 dasel,您就立即具备查询/修改任何支持的数据类型的能力,无需任何额外的工具或努力。

快速开始

Dasel 可在homebrew[3]ASDF[4]scoop[5]docker[6]Nix[7]或从最新发布[8]编译二进制文件[9]中获取。

brew install dasel

您也可以安装开发版本[10]

go install github.com/tomwright/dasel/v2/cmd/dasel@master

更多信息请查看安装文档[11]

选择

echo '{"name": "Tom"}' | dasel -r json 'name'
"Tom"

查看选择文档[12]

将 json 转换为 yaml

echo '{"name": "Tom"}' | dasel -r json -w yaml
name: Tom

查看选择文档[13]

放置

echo '{"name": "Tom"}' | dasel put -r json -t string -v 'contact@tomwright.me' 'email'
{
  "email""contact@tomwright.me",
  "name""Tom"
}

查看放置文档[14]

删除

echo '{
  "email": "contact@tomwright.me",
  "name": "Tom"
}'
 | dasel delete -r json '.email'
{
  "name""Tom"
}

查看删除文档[15]

自动补全

如果您想从终端使用自动补全,您可以执行以下操作(以 zsh 为例):

将以下内容添加到~/.zshrc并重新加载您的终端。

export fpath=(~/zsh/site-functions $fpath)
mkdir -p ~/zsh/site-functions
dasel completion zsh > ~/zsh/site-functions/_dasel
compinit

预提交

dasel钩子添加到.pre-commit-config.yaml文件

- repo: https://github.com/TomWright/dasel
  rev: v1.25.1
  hooks:
    - id: dasel-validate

用于 dasel 的原生执行,或使用:

  • dasel-validate-docker预提交钩子,使用官方Docker 镜像[16]执行 dasel
  • dasel-validate-bin预提交钩子,使用官方二进制文件[17]执行 dasel

问题与讨论

我在该仓库上启用了讨论[18]

我知道在报告问题、提问或提出功能请求时可能会有些困惑,不知道应该在哪里交流,所以本节旨在帮助我们达成一致。

如果您:

  • 发现了一个错误。
  • 有一个功能请求,并且可以清楚地描述您的请求。

提出问题[19]

如果您:

  • 有一个问题。
  • 不确定如何使用 dasel 实现某事。
  • 有一个想法,但不太清楚您希望它如何工作。
  • 使用 dasel 取得了一些很酷的成果,想要展示。
  • 其他任何事情!

开启讨论[20]

特性

  • 从结构化数据文件中查询/选择数据[21]
  • 更新结构化数据文件中的数据[22]
  • 创建数据文件。
  • 支持多种数据格式/类型[23]
  • 在数据格式/类型之间进行转换[24]
  • 使用跨所有数据格式的标准查询/选择器语法[25]
  • 零运行时依赖。
  • 在 Linux、Mac 和 Windows 上可用[26]
  • 可在自己的项目中导入和使用[27]
  • 通过 Docker 运行[28]
  • 比 jq/yq 更快[29]
  • 预提交钩子[30]

文档

官方 dasel 文档可在daseldocs.tomwright.me[31]找到。

试验场

您可以使用试验场[32]测试 dasel 命令。

试验场的源代码可在github.com/TomWright/daselplayground[33]找到。

基准测试

在我的测试中,dasel 的速度比 jq 快 3 倍,比 yq 快 15 倍。

查看基准测试目录[34]

参考资料
[1]

jq: https://github.com/stedolan/jq

[2]

/yq: https://github.com/kislyuk/yq

[3]

homebrew: https://daseldocs.tomwright.me/installation#homebrew

[4]

ASDF: https://daseldocs.tomwright.me/installation#asdf

[5]

scoop: https://daseldocs.tomwright.me/installation#scoop

[6]

docker: https://daseldocs.tomwright.me/installation#docker

[7]

Nix: https://daseldocs.tomwright.me/installation#nix

[8]

最新发布: https://github.com/TomWright/dasel/releases/latest

[9]

编译二进制文件: https://daseldocs.tomwright.me/installation#manual

[10]

开发版本: https://daseldocs.tomwright.me/installation#development-version

[11]

安装文档: https://daseldocs.tomwright.me/installation

[12]

选择文档: https://daseldocs.tomwright.me/commands/select

[13]

选择文档: https://daseldocs.tomwright.me/commands/select

[14]

放置文档: https://daseldocs.tomwright.me/commands/put

[15]

删除文档: https://daseldocs.tomwright.me/commands/delete

[16]

Docker 镜像: https://daseldocs.tomwright.me/installation#docker

[17]

二进制文件: https://daseldocs.tomwright.me/installation

[18]

讨论: https://github.com/TomWright/dasel/discussions

[19]

提出问题: https://github.com/TomWright/dasel/issues

[20]

开启讨论: https://github.com/TomWright/dasel/discussions

[21]

从结构化数据文件中查询/选择数据: https://daseldocs.tomwright.me/commands/select

[22]

更新结构化数据文件中的数据: https://daseldocs.tomwright.me/commands/put

[23]

支持多种数据格式/类型: https://daseldocs.tomwright.me/supported-file-formats

[24]

在数据格式/类型之间进行转换: https://daseldocs.tomwright.me/examples/change-file-format

[25]

标准查询/选择器语法: https://daseldocs.tomwright.me/functions/selector-overview

[26]

在 Linux、Mac 和 Windows 上可用: https://daseldocs.tomwright.me/installation

[27]

自己的项目中导入和使用: https://pkg.go.dev/github.com/tomwright/dasel/v2

[28]

通过 Docker 运行: https://daseldocs.tomwright.me/installation#docker

[29]

比 jq/yq 更快: #基准测试

[30]

预提交钩子: #预提交

[31]

daseldocs.tomwright.me: https://daseldocs.tomwright.me

[32]

试验场: https://dasel.tomwright.me

[33]

github.com/TomWright/daselplayground: https://github.com/TomWright/daselplayground

[34]

基准测试目录: ./benchmark/README.md


编程悟道
自制软件研发、软件商店,全栈,ARTS 、架构,模型,原生系统,后端(Node、React)以及跨平台技术(Flutter、RN).vue.js react.js next.js express koa hapi uniapp Astro
 最新文章