3 releases

new 0.1.2 Oct 29, 2024
0.1.1 Apr 11, 2019
0.1.0 Mar 19, 2019

#503 in Encoding

MIT license

17KB
401 lines

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

Dependencies

~0.7–1.6MB
~35K SLoC