#serde-json #json #sorting #merge #serde #iter

serde_json_merge

Merge, index, iterate, and sort a serde_json::Value (recursively)

2 releases

0.0.4 Sep 28, 2022
0.0.3 Sep 22, 2022

#759 in Encoding

Download history 305/week @ 2023-12-14 161/week @ 2023-12-21 161/week @ 2023-12-28 471/week @ 2024-01-04 507/week @ 2024-01-11 2477/week @ 2024-01-18 2222/week @ 2024-01-25 3622/week @ 2024-02-01 2433/week @ 2024-02-08 503/week @ 2024-02-15 32/week @ 2024-02-22 698/week @ 2024-02-29 1361/week @ 2024-03-07 20/week @ 2024-03-14 155/week @ 2024-03-21 599/week @ 2024-03-28

2,468 downloads per month
Used in cargo-feature-combination…

Custom license

110KB
3K SLoC

serde_json_merge

build status test status benchmarks crates.io docs.rs

Merge, index, iterate, and sort a serde_json::Value (recursively).

This library supports in-place merging and sorting using DFS and BFS traversal unline most implementations out there that use recursion and can stack overflow.

[dependencies]
serde_json_merge = "0"

Usage

For usage examples, check the examples and documentation.

Examples

cargo run --example async_fs --features async -- --path ./
cargo run --example sync_fs --features sync,rayon -- --path ./

Documentation

RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features

Linting

cargo feature-combinations clippy --fail-fast --pedantic --tests --benches --examples -- -Dclippy::all -Dclippy::pedantic
cargo clippy --tests --benches --examples -- -Dclippy::all -Dclippy::pedantic

Benchmarking

cargo install cargo-criterion
# full benchmark suite
cargo criterion --features full

Benchmark reports from CI are published are available here.

Acknowledgements

After i wrote this crate for another project and decided to publish it, I found json_value_merge.

Looking through it, I added merge_index inspired by their merge_in API.

TODO

  • write benchmarks

  • add globbing iter

  • add iters for keys and values

  • implement sorting values with indices

  • implement bfs

  • add rayon support using par-dfs

  • write documentation

  • add examples in the documentation

DONE:

  • inline everything
  • do we really need the any type? so useless right now :(
    • maybe use them for the very precise type?
  • add custom comparator for merging
  • split the sorting into extra module
  • implement unstable sorting
  • add feature gates for sort and merge
  • add few more tests for kind and so on
  • partial eq can be written top level
  • add limit to dfs
  • do not expose wrapper for Value but use extension
  • add depth parameter to recursive merge

Dependencies

~4.5–6MB
~116K SLoC