{"record":{"id":"60a11b2dcf9780b3","repo":"mikefarah/yq","slug":"csv-encoding-only-works-for-arrays-of-scalars-str","errorCode":null,"errorMessage":"csv encoding only works for arrays of scalars (string/numbers/booleans), child[%v] is a %v","messagePattern":"csv encoding only works for arrays of scalars \\(string/numbers/booleans\\), child\\[(.+?)\\] is a (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/yqlib/encoder_csv.go","lineNumber":37,"sourceCode":"func (e *csvEncoder) CanHandleAliases() bool {\n\treturn false\n}\n\nfunc (e *csvEncoder) PrintDocumentSeparator(_ io.Writer) error {\n\treturn nil\n}\n\nfunc (e *csvEncoder) PrintLeadingContent(_ io.Writer, _ string) error {\n\treturn nil\n}\n\nfunc (e *csvEncoder) encodeRow(csvWriter *csv.Writer, contents []*CandidateNode) error {\n\tstringValues := make([]string, len(contents))\n\n\tfor i, child := range contents {\n\n\t\tif child.Kind != ScalarNode {\n\t\t\treturn fmt.Errorf(\"csv encoding only works for arrays of scalars (string/numbers/booleans), child[%v] is a %v\", i, child.Tag)\n\t\t}\n\t\tstringValues[i] = child.Value\n\t}\n\treturn csvWriter.Write(stringValues)\n}\n\nfunc (e *csvEncoder) encodeArrays(csvWriter *csv.Writer, content []*CandidateNode) error {\n\tfor i, child := range content {\n\n\t\tif child.Kind != SequenceNode {\n\t\t\treturn fmt.Errorf(\"csv encoding only works for arrays of scalars (string/numbers/booleans), child[%v] is a %v\", i, child.Tag)\n\t\t}\n\t\terr := e.encodeRow(csvWriter, child.Content)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/mikefarah/yq/blob/8b5af0694bb82b41d4ae180fac9972029066f90a/pkg/yqlib/encoder_csv.go#L19-L55","documentation":"encodeRow, which flattens one array row into CSV columns, found a child that is not a ScalarNode (e.g. a nested map or array at child index %v). CSV rows are flat: every element of each array must be a string, number, or boolean; nested structures cannot be represented as a single CSV cell.","triggerScenarios":"Thrown at pkg/yqlib/encoder_csv.go:37 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Flatten nested structures before encoding (e.g. using [.[] | ... ] or flatten)","Convert the nested value to a string with tostring","Use a hierarchical format (@json/@yaml) instead of @csv if nesting must be preserved"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8b5af0694bb82b41d4ae180fac9972029066f90a","analyzedAt":"2026-09-05T10:57:22.766Z","contentChangedAt":"2026-09-05T10:57:22.766Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}