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]执行 daseldasel-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]。
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