You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							133 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							133 lines
						
					
					
						
							2.0 KiB
						
					
					
				| package json | |
| 
 | |
| import ( | |
| 	"testing" | |
| 
 | |
| 	"github.com/tidwall/gjson" | |
| ) | |
| 
 | |
| func TestGjson(t *testing.T) { | |
| 	data := ` | |
| 	{ | |
| 		"quiz": { | |
| 			"sport": { | |
| 				"q1": { | |
| 					"question": "Which one is correct team name in NBA?", | |
| 					"options": [ | |
| 						"New York Bulls", | |
| 						"Los Angeles Kings", | |
| 						"Golden State Warriros", | |
| 						"Huston Rocket" | |
| 					], | |
| 					"answer": "Huston Rocket" | |
| 				} | |
| 			}, | |
| 			"maths": { | |
| 				"q1": { | |
| 					"question": "5 + 7 = ?", | |
| 					"options": [ | |
| 						"10", | |
| 						"11", | |
| 						"12", | |
| 						"13" | |
| 					], | |
| 					"answer": "12" | |
| 				}, | |
| 				"q2": { | |
| 					"question": "12 - 8 = ?", | |
| 					"options": [ | |
| 						"1", | |
| 						"2", | |
| 						"3", | |
| 						"4" | |
| 					], | |
| 					"answer": "4" | |
| 				} | |
| 			} | |
| 		} | |
| 	} | |
|  | |
| 	{ | |
| 		"fruit": "Apple", | |
| 		"size": "Large", | |
| 		"quiz": "Red" | |
| 	} | |
|  | |
| ` | |
| 
 | |
| 	projections := []string{"quiz", "fruit"} | |
| 
 | |
| 	gjson.ForEachLine(data, func(line gjson.Result) bool { | |
| 		println(line.Raw) | |
| 		println("+++++++++++") | |
| 		results := gjson.GetMany(line.Raw, projections...) | |
| 		for _, result := range results { | |
| 			println(result.Index, result.Type, result.String()) | |
| 		} | |
| 		println("-----------") | |
| 		return true | |
| 	}) | |
| 
 | |
| } | |
| 
 | |
| func TestJsonQueryRow(t *testing.T) { | |
| 
 | |
| 	data := ` | |
| 	{ | |
| 		"fruit": "Bl\"ue", | |
| 		"size": 6, | |
| 		"quiz": "green" | |
| 	} | |
|  | |
| ` | |
| 	selections := []string{"fruit", "size"} | |
| 
 | |
| 	isFiltered, values := QueryJson(data, selections, Query{ | |
| 		Field: "quiz", | |
| 		Op:    "=", | |
| 		Value: "green", | |
| 	}) | |
| 
 | |
| 	if !isFiltered { | |
| 		t.Errorf("should have been filtered") | |
| 	} | |
| 
 | |
| 	if values == nil { | |
| 		t.Errorf("values should have been returned") | |
| 	} | |
| 
 | |
| 	buf := ToJson(nil, selections, values) | |
| 	println(string(buf)) | |
| 
 | |
| } | |
| 
 | |
| func TestJsonQueryNumber(t *testing.T) { | |
| 
 | |
| 	data := ` | |
| 	{ | |
| 		"fruit": "Bl\"ue", | |
| 		"size": 6, | |
| 		"quiz": "green" | |
| 	} | |
|  | |
| ` | |
| 	selections := []string{"fruit", "quiz"} | |
| 
 | |
| 	isFiltered, values := QueryJson(data, selections, Query{ | |
| 		Field: "size", | |
| 		Op:    ">=", | |
| 		Value: "6", | |
| 	}) | |
| 
 | |
| 	if !isFiltered { | |
| 		t.Errorf("should have been filtered") | |
| 	} | |
| 
 | |
| 	if values == nil { | |
| 		t.Errorf("values should have been returned") | |
| 	} | |
| 
 | |
| 	buf := ToJson(nil, selections, values) | |
| 	println(string(buf)) | |
| 
 | |
| }
 |