|  |  |  | @ -128,6 +128,7 @@ impl DotPaths for serde_json::Value { | 
			
		
	
		
			
				
					|  |  |  |  |         match self { | 
			
		
	
		
			
				
					|  |  |  |  |             Value::Array(vec) => vec.dot_get(path), | 
			
		
	
		
			
				
					|  |  |  |  |             Value::Object(map) => map.dot_get(path), | 
			
		
	
		
			
				
					|  |  |  |  |             Value::Null => None, | 
			
		
	
		
			
				
					|  |  |  |  |             _ => { | 
			
		
	
		
			
				
					|  |  |  |  |                 if path.is_empty() { | 
			
		
	
		
			
				
					|  |  |  |  |                     serde_json::from_value(self.to_owned()).ok() | 
			
		
	
	
		
			
				
					|  |  |  | @ -142,6 +143,7 @@ impl DotPaths for serde_json::Value { | 
			
		
	
		
			
				
					|  |  |  |  |         match self { | 
			
		
	
		
			
				
					|  |  |  |  |             Value::Array(vec) => vec.dot_get_mut(path), | 
			
		
	
		
			
				
					|  |  |  |  |             Value::Object(map) => map.dot_get_mut(path), | 
			
		
	
		
			
				
					|  |  |  |  |             Value::Null => None, | 
			
		
	
		
			
				
					|  |  |  |  |             _ => { | 
			
		
	
		
			
				
					|  |  |  |  |                 if path.is_empty() { | 
			
		
	
		
			
				
					|  |  |  |  |                     Some(self) | 
			
		
	
	
		
			
				
					|  |  |  | @ -227,6 +229,10 @@ fn new_by_path_root<T>(path: &str, value: T) -> Value | 
			
		
	
		
			
				
					|  |  |  |  | where | 
			
		
	
		
			
				
					|  |  |  |  |     T: Serialize, | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     if path.is_empty() { | 
			
		
	
		
			
				
					|  |  |  |  |         return serde_json::to_value(value).expect("Serialize error"); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     let (sub1, _) = path_split(path); | 
			
		
	
		
			
				
					|  |  |  |  |     if sub1 == "0" || sub1 == "+" || sub1 == "<" || sub1 == ">" { | 
			
		
	
		
			
				
					|  |  |  |  |         // new vec
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -548,6 +554,31 @@ mod tests { | 
			
		
	
		
			
				
					|  |  |  |  |         let _ = value.dot_get::<Value>("1.2.3"); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     #[test] | 
			
		
	
		
			
				
					|  |  |  |  |     fn set_null() { | 
			
		
	
		
			
				
					|  |  |  |  |         let mut item = Value::Null; | 
			
		
	
		
			
				
					|  |  |  |  |         item.dot_set("", "foo"); | 
			
		
	
		
			
				
					|  |  |  |  |         assert_eq!(Value::String("foo".into()), item); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     #[test] | 
			
		
	
		
			
				
					|  |  |  |  |     fn replace_null() { | 
			
		
	
		
			
				
					|  |  |  |  |         let mut item = Value::Null; | 
			
		
	
		
			
				
					|  |  |  |  |         assert_eq!(None, item.dot_replace::<_, Value>("", "foo")); | 
			
		
	
		
			
				
					|  |  |  |  |         assert_eq!(Value::String("foo".into()), item); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     #[test] | 
			
		
	
		
			
				
					|  |  |  |  |     fn take_null() { | 
			
		
	
		
			
				
					|  |  |  |  |         let mut item = Value::Null; | 
			
		
	
		
			
				
					|  |  |  |  |         assert_eq!(None, item.dot_take::<Value>("")); | 
			
		
	
		
			
				
					|  |  |  |  |         assert_eq!(Value::Null, item); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         let mut item = Value::Bool(true); | 
			
		
	
		
			
				
					|  |  |  |  |         assert_eq!(Some(true), item.dot_take::<bool>("")); | 
			
		
	
		
			
				
					|  |  |  |  |         assert_eq!(Value::Null, item); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     #[test] | 
			
		
	
		
			
				
					|  |  |  |  |     fn set_vec() { | 
			
		
	
		
			
				
					|  |  |  |  |         let mut vec = Value::Array(vec![]); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |