Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/abrarnitk/sorted_json_keys

Small Rust library to filter and sort the json.
https://github.com/abrarnitk/sorted_json_keys

Last synced: 22 days ago
JSON representation

Small Rust library to filter and sort the json.

Awesome Lists containing this project

README

        

# sorted_json_keys

Rust lib to sort JSON based on string keys and filter json values

Note:

- filter is working based on the keys
- sorted is buggy, need improvements

```rust

#[cfg(test)]
mod tests {
use crate::filter::keys::filter;

#[test]
fn test_map_filter() {
let data: serde_json::Value = serde_json::json!({
"foo": "bar",
"config": {
"foo-config": "bar",
"temp": "temppp",
"hector": "tractor"
}
});

let filtered = filter(data, &|key| {
vec!["foo", "config.temp", "config.hector"].contains(&key)
});

let expected = serde_json::json!({
"config": {
"hector": "tractor",
"temp": "temppp"
},
"foo": "bar"
});

assert_eq!(expected, filtered);
// println!("value: {}", serde_json::to_string_pretty(&value).unwrap());
}

#[test]
fn test_list_filter() {
let data: serde_json::Value = serde_json::json!({
"foo": "bar",
"config": [
{
"foo-config": "bar",
"temp": "temppp",
"hector": "tractor"
},
{
"foo-config": "bar1",
"temp": "temppp1",
"hector": "tractor1"
}
]
});

let expected = serde_json::json!({
"foo": "bar",
"config": [
{
"hector": "tractor",
"temp": "temppp"
},
{
"hector": "tractor1",
"temp": "temppp1"
}
]
});

let filtered = filter(data, &|key| {
vec!["foo", "config.[].temp", "config.[].hector"].contains(&key)
});
assert_eq!(expected, filtered);
}

#[test]
fn filter_inner_list() {
let data: serde_json::Value = serde_json::json!({
"foo": "bar",
"config": [
{
"foo-config": "bar",
"temp": [{ "a": 1 }],
"hector": "tractor"
},
{
"foo-config": "bar1",
"temp": [{ "a": 2 }],
"hector": "tractor1"
}
]
});

let filtered = filter(data, &|key| key == "config.[].temp.[].a");

let expected: serde_json::Value = serde_json::json!({
"config": [
{
"temp": [{ "a": 1 }],
},
{
"temp": [{ "a": 2 }],
}
]
});

assert_eq!(expected, filtered);

// println!("value: {}", serde_json::to_string_pretty(&filtered).unwrap());
}
}

```