package main import ( "encoding/json" "fmt" goccy "github.com/goccy/go-json" "log" ) func main() { rawData := []byte(`{"steps": [{"config":{"message": "Fail 
<"}}]}`) type config struct { Steps []struct { Config json.RawMessage `json:"config"` } } v1 := config{} if err := json.Unmarshal(rawData, &v1); err != nil { log.Fatal(err) } dataFromSTD, err := json.Marshal(v1) // {"Steps":[{"config":{"message":"Fail \u2028\u003c"}}]} if err != nil { log.Fatal(err) } v2 := config{} if err := goccy.Unmarshal(rawData, &v2); err != nil { log.Fatal(err) } // https://github.com/goccy/go-json/blob/master/internal/encoder/compact.go#L208 dataFromGOCCY, err := goccy.Marshal(v1) // panic: runtime error: slice bounds out of range [23:21] if err != nil { log.Fatal(err) } if string(dataFromSTD) == string(dataFromGOCCY) { fmt.Println("OK") return } log.Fatal("diff") }