#json-path #json #path

bin+lib jindex

通过 JSON 文档枚举路径

12 个版本 (重大变更)

0.10.0 2023年3月26日
0.9.0 2022年1月10日
0.8.2 2021年11月11日
0.7.0 2021年3月28日
0.3.0 2020年11月23日

#2321 in 命令行工具

每月下载量 43 次

BSD-3-Clause

220KB
640 代码行

jindex

通过 JSON 文档枚举路径,输出与 gron 兼容的 API

Rust

安装

从 crates.io 的最新稳定版本

$ cargo install jindex

从源的最新不稳定(HEAD)版本

$ cargo install --git https://github.com/ckampfe/jindex

示例

您可以通过 stdin 传递 JSON

$ echo '{
  "a": 1,
  "b": 2,
  "c": ["x", "y", "z"],
  "d": {"e": {"f": [{}, 9, "g"]}}
}' | jindex

json.d.e.f[2] = "g";
json.d.e.f[1] = 9;
json.d.e.f[0] = {};
json.c[2] = "z";
json.c[1] = "y";
json.c[0] = "x";
json.b = 2;
json.a = 1;

或从文件

$ jindex myfile.json

json.d.e.f[2] = "g";
json.d.e.f[1] = 9;
json.d.e.f[0] = {};
json.c[2] = "z";
json.c[1] = "y";
json.c[0] = "x";
json.b = 2;
json.a = 1;

使用 json_pointer 格式选项

$ jindex -fjson_pointer myfile.json
/d/e/f/2        "g"
/d/e/f/1        9
/d/e/f/0        {}
/c/2    "z"
/c/1    "y"
/c/0    "x"
/b      2
/a      1

使用 json 格式选项

jindex -fjson myfile.json
{"path_components":["d","e","f",2],"value":"g"}
{"path_components":["d","e","f",1],"value":9}
{"path_components":["d","e","f",0],"value":{}}
{"path_components":["c",2],"value":"z"}
{"path_components":["c",1],"value":"y"}
{"path_components":["c",0],"value":"x"}
{"path_components":["b"],"value":2}
{"path_components":["a"],"value":1}

命令行界面

$ jindex -h
jindex 0.8.2
Enumerate the paths through a JSON document

USAGE:
    jindex [OPTIONS] [json-location]

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

OPTIONS:
    -f, --format <format>    gron, json_pointer, json [default: gron]

ARGS:
    <json-location>    A JSON file path

路径输出顺序

jindex 对路径输出的顺序不做任何保证。路径可能以深度优先、广度优先或其他任何顺序出现,相对于输入 JSON 文档中的位置。此外,任何顺序都不保证在不同版本之间稳定,因为这可能会为了实现新的优化而改变。如果稳定的顺序很重要,建议使用 sort 或其他事后机制,因为从给定输入文档输出的路径集保证随着时间的推移是稳定的。

性能

要运行基准测试

# install the benchmark runner
$ cargo install cargo-criterion
# clone the project
$ git clone https://github.com/ckampfe/jindex
# run the benchmarks
$ cd jindex
$ cargo criterion

功能

jindex 默认使用 jemalloc 以显著提高吞吐量。如果您不希望使用 jemalloc,可以通过向 Cargo 传递 --no-default-features 标志来构建不带它的版本。

版本策略

jindex 保持为预 1.0 版本,因此不保证不同版本之间的 API 兼容性。尽管如此,jindex 的 API 非常小,未来不太可能发生显著变化。达到 1.0 版本是一个项目目标,但并不是我认为比其他目标更重要的事情。如果这成问题或有疑问,请提出问题。

依赖项

~3.5–5MB
~114K SLoC