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  }