9 个版本 (5 个重大变更)

0.6.0 2024年6月6日
0.5.1 2024年2月8日
0.4.1 2022年8月11日
0.3.0 2022年5月31日
0.1.1 2021年1月28日

#205解析实现

Apache-2.0

175KB
3.5K SLoC

包含 (JAR 文件,44KB) gradle-wrapper.jar

ion-cli

本存储库是 ion 命令行工具的家园,该工具提供用于处理 Ion 数据格式 的子命令。

目录

示例

这些示例使用 .ion 文件扩展名表示文本 Ion,使用 .10n 文件扩展名表示二进制 Ion。这只是一个约定;该工具不会评估文件扩展名。

除非另有说明,否则这些命令可以接受任何 Ion 格式作为输入。

使用 dump 在格式之间进行转换

将 Ion 文本(或 JSON)转换为 Ion 二进制格式

ion dump --format binary my_file.ion

将 Ion 二进制转换为宽松间距、易于阅读的文本

ion dump --format pretty my_file.10n

将 Ion 二进制转换为紧凑的文本

ion dump --format text my_file.10n

使用 tofrom 在 Ion 和其他格式之间进行转换

beta tobeta from 命令可以将 Ion 转换为其他格式,也可以将其他格式转换为 Ion。目前支持 JSON。

将 Ion 转换为 JSON

ion beta to json my_file.10n

将 JSON 转换为 Ion

ion beta from json my_file.json

使用 inspect 分析二进制 Ion 文件的编码

beta inspect 命令可以显示二进制 Ion 文件的十六进制字节及其等效的文本 Ion,以便于分析。

# Write some text Ion to a file
echo '{foo: null, bar: true, baz: [1, 2, 3]}' > my_file.ion

# Convert the text Ion to binary Ion
ion dump --format binary my_file.ion > my_file.10n

# Show the binary encoding alongside its equivalent text 
ion beta inspect my_file.10n

---------------------------------------------------------------------------
 Offset   |  Length   |        Binary Ion        |         Text Ion
---------------------------------------------------------------------------
          |         4 | e0 01 00 ea              |  // Ion 1.0 Version Marker
        4 |         4 | ee 95 81 83              |  '$ion_symbol_table':: // $3::
        8 |        19 | de 91                    |  {
       10 |         1 | 86                       |    'imports': // $6:
       11 |         2 | 71 03                    |    $ion_symbol_table, // $3
       13 |         1 | 87                       |    'symbols': // $7:
       14 |        13 | bc                       |    [
       15 |         4 | 83 66 6f 6f              |       "foo",
       19 |         4 | 83 62 61 72              |       "bar",
       23 |         4 | 83 62 61 7a              |       "baz",
          |           |                          |    ],
          |           |                          |  }
       27 |        13 | dc                       |  {
       28 |         1 | 8a                       |    'foo': // $10:
       29 |         1 | 0f                       |     null,
       30 |         1 | 8b                       |    'bar': // $11:
       31 |         1 | 11                       |     true,
       32 |         1 | 8c                       |    'baz': // $12:
       33 |         7 | b6                       |    [
       34 |         2 | 21 01                    |       1,
       36 |         2 | 21 02                    |       2,
       38 |         2 | 21 03                    |       3,
          |           |                          |    ],
          |           |                          |  }

要跳到流中的特定偏移量,可以使用 --skip-bytes 标志

ion beta inspect --skip-bytes 30 my_file.10n
---------------------------------------------------------------------------
 Offset   |  Length   |        Binary Ion        |         Text Ion
---------------------------------------------------------------------------
          |         4 | e0 01 00 ea              |  // Ion 1.0 Version Marker
          |           | ...                      |  // Skipped 23 bytes of user-level data
       27 |        13 | dc                       |  {
          |           | ...                      |    // Skipped 2 bytes of user-level data
       30 |         1 | 8b                       |    'bar': // $11:
       31 |         1 | 11                       |    true,
       32 |         1 | 8c                       |    'baz': // $12:
       33 |         7 | b6                       |    [
       34 |         2 | 21 01                    |       1,
       36 |         2 | 21 02                    |       2,
       38 |         2 | 21 03                    |       3,
          |           |                          |    ],
          |           |                          |  }

请注意,文本列添加了注释,指出数据已跳过。此外,如果请求的索引位于一个或多个容器内部,则这些容器的开头(包括它们的长度和偏移量)也将包含在输出中。

您可以使用 --limit-bytes 标志限制 inspect 显示的数据量

ion beta inspect --skip-bytes 30 --limit-bytes 2 my_file.10n
---------------------------------------------------------------------------
 Offset   |  Length   |        Binary Ion        |         Text Ion
---------------------------------------------------------------------------
          |         4 | e0 01 00 ea              |  // Ion 1.0 Version Marker
          |           | ...                      |  // Skipped 23 bytes of user-level data
       27 |        13 | dc                       |  {
          |           | ...                      |    // Skipped 2 bytes of user-level data
       30 |         1 | 8b                       |    'bar': // $11:
       31 |         1 | 11                       |    true,
          |           | ...                      |    // --limit-bytes reached, stepping out.
          |           |                          |  }

模式子命令

所有加载或验证模式的子命令都在 beta schema 子命令下。

加载模式

ion beta schema load --directory <DIRECTORY> --schema <SCHEMA_FILE> 

验证 ion 值与模式类型

ion beta schema validate --directory <DIRECTORY> --schema <SCHEMA_FILE> --input <INPUT_FILE> --type <TYPE>

有关如何使用CLI的schema子命令的更多信息,请运行以下命令

ion beta schema help  

安装

通过 brew

安装 ion-cli 最简单的方法是通过 Homebrew

一旦 brew 命令可用,请运行

brew tap amazon-ion/ion-cli
brew install ion-cli

通过 cargo

ion-cli 还可以通过使用Rust的包管理器 cargo 进行安装。如果您还没有 cargo,您可以通过访问 rustup.rs 来安装它。

要安装 ion-cli,请运行以下命令

cargo install ion-cli

然后确保 ~/.cargo/bin 在您的 $PATH 上。您可以通过运行以下命令来确认是否已成功安装:

ion help

您应该看到类似以下内容的输出

ion 0.4.0
The Ion Team <ion-team@amazon.com>

USAGE:
    ion <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    beta    The 'beta' command is a namespace for commands whose interfaces are 
            not yet stable.
    dump    Prints Ion in the requested format
    help    Prints this message or the help of the given subcommand(s)

构建说明

从源代码构建

  1. 克隆存储库

    git clone https://github.com/amzn/ion-cli.git
    
  2. 进入新创建的目录

    cd ion-cli
    
  3. 通过访问 rustup.rs 安装Rust/Cargo。

  4. 构建 ion 工具

    cargo install --path .
    

    这将把 ion 可执行文件的副本放入 ~/.cargo/bin

  5. 请确保 ~/.cargo/bin 在您的 $PATH 上。 rustup 可能会为您处理这个问题。

  6. 通过运行以下命令来确认可执行文件是否可用:

    ion help
    

使用 Docker

  1. 安装Docker(请参阅Docker网站上的操作系统特定说明 Docker website
  2. 克隆存储库(无需递归克隆)
    git clone https://github.com/amzn/ion-cli.git
    
  3. 进入新创建的目录
    cd ion-cli
    
  4. 构建和运行镜像
    # build the image
    docker build -t <IMAGE_NAME>:<TAG> .
    
    
    # run the CLI binary inside the Docker image
    docker run -it --rm [optional flags...] <IMAGE_NAME>:<TAG> ion <SUBCOMMAND>
    
    # examples:
    
    # build docker image with current release version
    docker build -t ion-cli:0.1.1 .
    
    # print the help message
    docker run -it --rm ion-cli:0.1.1 ion -V
    
    # mount current directory to /data volume and dump an ion file
    docker run -it --rm -v $PWD:/data ion-cli:0.1.1 ion dump /data/test.ion
    
    

安全

有关更多信息,请参阅 CONTRIBUTING

许可协议

本项目采用Apache-2.0许可协议。

依赖关系

~15–28MB
~431K SLoC