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 次
220KB
640 代码行
jindex
通过 JSON 文档枚举路径,输出与 gron 兼容的 API
安装
从 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