2 个版本

0.1.2 2022 年 9 月 23 日
0.1.1 2022 年 9 月 22 日

#1795命令行工具

MIT 许可证

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
其他包

您还可以安装 jqbat

nix-env -iA nixpkgs.jq nixpkgs.bat

这些不是将 TOML 转换为 JSON 以及反之必需的,但 jq 对于过滤是必需的,而 bat 对于 --bat 选项是必需的。

Shell

您可以使用 nix-shell 方便地尝试使用 jqbattomq

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