{"record":{"id":"29c3ddb03b0a0cab","repo":"slimtoolkit/slim","slug":"error-encoding-data-v","errorCode":null,"errorMessage":"error encoding data - %v","messagePattern":"error encoding data - (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/mondel/mondel.go","lineNumber":190,"sourceCode":"\n\t\tcase <-ticker.C:\n\t\t\t// Flush the buffer every second\n\t\t\tif buf.Len() > 0 {\n\t\t\t\tif _, err := ref.output.Write(buf.Bytes()); err != nil {\n\t\t\t\t\tlogger.Errorf(\"Error writing batch: %v\", err)\n\t\t\t\t}\n\t\t\t\tbuf.Reset()\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc encodeEvent(event *report.MonitorDataEvent) (string, error) {\n\tvar b bytes.Buffer\n\tenc := json.NewEncoder(&b)\n\tenc.SetEscapeHTML(false)\n\tif err := enc.Encode(event); err != nil {\n\t\treturn \"\", fmt.Errorf(\"error encoding data - %v\", err)\n\t}\n\n\treturn b.String(), nil\n}\n","sourceCodeStart":172,"sourceCodeEnd":195,"githubUrl":"https://github.com/slimtoolkit/slim/blob/81940d17fa112cc678e32209214bcb2355cb3004/pkg/mondel/mondel.go#L172-L195","documentation":"encodeEvent serializes a MonitorDataEvent to JSON with SetEscapeHTML(false); if json.Encoder.Encode returns an error it is wrapped as \"error encoding data - %v\". Encoding a concrete struct like this rarely fails — it typically requires unsupported types in the payload (e.g. channels, funcs, or cyclic data injected via interface fields).","triggerScenarios":"A MonitorDataEvent containing a field json.Marshal cannot handle (func, channel, complex numbers) or a custom MarshalJSON method returning an error.","commonSituations":"Adding a field of an unsupported type to the monitoring event struct, a nested custom type with a broken MarshalJSON, or cyclic pointers in event data.","solutions":["Inspect the wrapped error message naming the unsupported type and remove/convert that field.","Fix any custom MarshalJSON implementations on event payload types.","Ensure event data contains only JSON-serializable values (strings, numbers, bools, slices, maps, structs)."],"exampleFix":"// before\ntype MonitorDataEvent struct { Callback func() `json:\"-\"` } // func type breaks JSON\n// after\ntype MonitorDataEvent struct { CallbackName string }\n","handlingStrategy":"try-catch","validationCode":"if _, err := json.Marshal(event); err != nil {\n    return fmt.Errorf(\"event not serializable: %w\", err)\n}","typeGuard":"func isJSONSerializable(v any) bool {\n    var b []byte\n    return json.Unmarshal(mustJSON(v), &b) == nil // or pre-validate with json.Marshal in a helper\n}","tryCatchPattern":"s, err := encodeEvent(ev)\nif err != nil && strings.Contains(err.Error(), \"error encoding data\") {\n    log.Warnf(\"dropping unserializable monitor event: %v\", err)\n    return nil // or fall back to a minimal safe event\n}","preventionTips":["Keep monitor event structs limited to JSON-native types","Test custom MarshalJSON implementations on payload types","Avoid interface{} fields holding funcs/channels/cycles in events"],"tags":["json","encoding","monitoring"],"backgroundTag":"json-encoding-failed","analyzedSha":"81940d17fa112cc678e32209214bcb2355cb3004","analyzedAt":"2026-08-31T23:06:12.682Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}