github.com/minio/simdjson-go@v0.4.6-0.20231116094823-04d21cddf993/examples/simdjson_example.go (about) 1 //go:build ignore 2 // +build ignore 3 4 package main 5 6 import ( 7 "encoding/json" 8 "fmt" 9 "log" 10 "os" 11 12 "github.com/minio/simdjson-go" 13 ) 14 15 func printKeyHistogram(pj *simdjson.ParsedJson, key string) (err error) { 16 var elem *simdjson.Element 17 count := make(map[string]int) 18 err = pj.ForEach(func(i simdjson.Iter) error { 19 if elem, err = i.FindElement(elem, key); err != nil { 20 return nil 21 } 22 if elem.Type == simdjson.TypeString { 23 s, _ := elem.Iter.String() 24 count[s]++ 25 } 26 return nil 27 }) 28 res, _ := json.Marshal(count) 29 fmt.Println(key, ":", string(res)+"\n") 30 return err 31 } 32 33 func main() { 34 if !simdjson.SupportedCPU() { 35 log.Fatal("Unsupported CPU") 36 } 37 msg, err := os.ReadFile("parking-citations.json") 38 if err != nil { 39 log.Fatalf("Failed to load file: %v", err) 40 } 41 42 parsed, err := simdjson.ParseND(msg, nil) 43 if err != nil { 44 log.Fatalf("Failed to parse JSON: %v", err) 45 } 46 47 printKeyHistogram(parsed, "Make") 48 printKeyHistogram(parsed, "MeterId") 49 printKeyHistogram(parsed, "ViolationCode") 50 }