json_filter_sorted

Crates.iojson_filter_sorted
lib.rsjson_filter_sorted
version0.1.4
sourcesrc
created_at2019-03-19 05:33:33.638846
updated_at2024-11-20 12:49:36.023996
descriptionSerde JSON sorted and filter
homepage
repositoryhttps://github.com/AbrarNitk/sorted_json_keys
max_upload_size
id122426
size21,258
Abrar Khan (AbrarNitk)

documentation

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


#[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());
    }
}

Commit count: 16

cargo fmt