MCPcopy Index your code
hub / github.com/github/github-mcp-server / jsonTextToCSV

Function jsonTextToCSV

pkg/github/csv_output.go:108–153  ·  view source on GitHub ↗
(text string)

Source from the content-addressed store, hash-verified

106}
107
108func jsonTextToCSV(text string) (string, error) {
109 decoder := json.NewDecoder(strings.NewReader(text))
110 decoder.UseNumber()
111
112 var value any
113 if err := decoder.Decode(&value); err != nil {
114 return "", fmt.Errorf("failed to unmarshal JSON text: %w", err)
115 }
116
117 doc := csvDocument(value)
118 if len(doc.metadata) == 0 && len(doc.rows) == 0 {
119 return "", nil
120 }
121
122 var buf bytes.Buffer
123 writeCSVMetadata(&buf, doc.metadata)
124 if len(doc.rows) == 0 {
125 return buf.String(), nil
126 }
127
128 headers := csvHeaders(doc.rows)
129 if len(headers) == 0 {
130 return buf.String(), nil
131 }
132
133 writer := csv.NewWriter(&buf)
134 if err := writer.Write(headers); err != nil {
135 return "", fmt.Errorf("failed to write CSV header: %w", err)
136 }
137
138 for _, row := range doc.rows {
139 record := make([]string, len(headers))
140 for i, header := range headers {
141 record[i] = row[header]
142 }
143 if err := writer.Write(record); err != nil {
144 return "", fmt.Errorf("failed to write CSV row: %w", err)
145 }
146 }
147
148 writer.Flush()
149 if err := writer.Error(); err != nil {
150 return "", fmt.Errorf("failed to flush CSV: %w", err)
151 }
152 return buf.String(), nil
153}
154
155func csvDocument(value any) csvOutputDocument {
156 switch v := value.(type) {

Calls 6

csvDocumentFunction · 0.85
writeCSVMetadataFunction · 0.85
csvHeadersFunction · 0.85
StringMethod · 0.45
WriteMethod · 0.45
ErrorMethod · 0.45