2 个版本
0.1.2 | 2022 年 9 月 23 日 |
---|---|
0.1.1 | 2022 年 9 月 22 日 |
#1795 在 命令行工具
83KB
1.5K SLoC
tomq
tomq 是一个简单的工具,可以将 TOML 转换为 JSON,以及将 JSON 转换为 TOML。
目录
安装
Nix 和 NixOS
发布
nix-env -f https://gitlab.com/Kores/tomq/-/archive/master/tomq-master.tar.bz2 -i tomq
开发
nix-env -f https://gitlab.com/Kores/tomq/-/archive/master/tomq-master.tar.bz2 -i tomq-bleeding
其他包
您还可以安装 jq
和 bat
nix-env -iA nixpkgs.jq nixpkgs.bat
这些不是将 TOML 转换为 JSON 以及反之必需的,但 jq 对于过滤是必需的,而 bat 对于 --bat
选项是必需的。
Shell
您可以使用 nix-shell
方便地尝试使用 jq 和 bat 的 tomq
nix-shell https://gitlab.com/Kores/tomq/-/archive/shell/tomq-shell.tar.bz2
Cargo
发布
cargo install tomq
开发
cargo install --git https://gitlab.com/Kores/tomq.git
其他发行版
tomq 最近发布了,我仍在整理代码,还没有时间为其他发行版打包。一旦我感到舒适,我将首先提交到 nixpkgs,然后开始为其他发行版打包。
示例
TOML 转换为 JSON
sh(以及兼容的,如 tcsh/csh/zsh/bash)
cat <<EOF | tomq
title = "tomq example"
description = "tomq is extraordinary"
EOF
fish
printf %s\n 'title = "tomq example"' 'description = "tomq is extraordinary"' | tomq
nushell
'
title = "tomq example"
description = "tomq is extraordinary"
' | tomq
附加
通过流式传输文件内容并将其管道传输到按需在 jq 上进行过滤,将所有 Cargo.toml
文件转换为 JSON 格式。
fd -0 'Cargo.toml' | xargs -r0 tomq --input-files
jq 过滤
需要安装 jq
二进制文件并将其放在 PATH(或任何默认位置)中
应用 jq 过滤器并输出 JSON 格式。
tomq '.package' Cargo.toml
重新编码 到 TOML
tomq -R '.package' Cargo.toml
将 JSON 转换为 TOML
echo -ne '{"package": {"name": "tomq"}}' | tomq -T
将 JSON 转换为 TOML(多文档)
使用多文档扩展(不遵守 TOML 规范)从 JSON 转换为 TOML。
echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}' | tomq -T
这不遵守 TOML 规范,但保留了原始 JSON 结构。
将 JSON 转换为 TOML(常用键)
使用常用键(遵守 TOML 规范)从 JSON 转换为 TOML。
echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}' | tomq -T -U packages
注意
这遵守 TOML 规范,但改变了 JSON 结构,可以使用 jq 恢复
echo -ne '{"package": {"name": "tomq", "version": "1.0.0"}}{"package": {"name": "tomq2", "version": "2.0.0"}}' | tomq -T -U packages | tomq '.packages[]'
处理 null
值
将 null
值转换为空文档
echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}{"foo": "bar"}' | jq '.package' | tomq -T -E
注意
即使 tomq 大部分 保留了原始 JSON 结构,TOML 没有对 null 值的感觉,因此将前面的输出转换回 JSON 将导致空对象
❯ echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}{"foo": "bar"}' | jq '.package'
{
"name": "tomq"
}
{
"name": "tomq2"
}
null
❯ echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}{"foo": "bar"}' | jq '.package' | tomq -T -E
name = "tomq"
---
name = "tomq2"
---
❯ echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}{"foo": "bar"}' | jq '.package' | tomq -T -E | tomq
{
"name": "tomq"
}
{
"name": "tomq2"
}
{}⏎
提供备用键
对于 JSON 输出不是对象的情况
❯ echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}' | jq '.package.name'
"tomq"
"tomq2"
❯ echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}' | jq '.package.name' | tomq -T -K names
names = "tomq"
---
names = "tomq2"
如果存在 null
值,TOML 无法表示它们,因此您需要使用 -E
标志
❯ echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}{"foo": "bar"}' | jq '.package.name'
"tomq"
"tomq2"
null
❯ echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}{"foo": "bar"}' | jq '.package.name' | tomq -T -E -K names
names = "tomq"
---
names = "tomq2"
---
-U
在这些情况下也可能很有用
❯ echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}' | jq '.package.name' | tomq -T -E -K value -U names
[[names]]
value = "tomq"
[[names]]
value = "tomq2"
❯ echo -ne '{"package": {"name": "tomq"}}{"package": {"name": "tomq2"}}' | jq '.package.name' | tomq -T -E -K value -U names | tomq '.names[].value'
"tomq"
"tomq2"
依赖项
~3.5–4.5MB
~90K SLoC