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