Golang encoding/csv: Difference between revisions

From wikinotes
Tag: Reverted
Tag: Manual revert
 
(One intermediate revision by the same user not shown)
Line 29: Line 29:
records, _ := reader.ReadAll()
records, _ := reader.ReadAll()
fmt.Println(records[0][1]) // 2
fmt.Println(records[0][1]) // 2
</syntaxhighlight>
XML is generally not homogenous.<br>
Record each possible sub-element as a field on your object.<br>
If an element can occur multiple times, declare it as an array.
<syntaxhighlight lang="go">
encoded := `
  <mediawiki>
      <siteinfo>
          abc
      </siteinfo>
      <page>
          <title>Main Page</title>
      </page>
      <page>
          <title>Linux</title>
      </page>
  </mediawiki>
`
type Result struct {
    XMLName  xml.Name `xml:"mediawiki"` // root node
    SiteInfo string  `xml:"siteinfo"`  // only one 'siteinfo' element under 'mediawiki'
    Page    []Page  `xml:"page"`      // multiple 'page' elements under 'mediawiki'
}
type Page struct {
    Title string `xml:"title"`
}
var result Result
xml.Unmarshall([]byte(encoded), &result)
fmt.Println(result.Page[0].Title.Text)  // Linux
</syntaxhighlight>
</syntaxhighlight>
</blockquote><!-- Deserializing -->
</blockquote><!-- Deserializing -->

Latest revision as of 02:50, 26 June 2022

Go's builtin module for encoding/decoding csv files.

NOTE:

go's builtin csv module does not conform to the normal encoding interface.


Serializing

data := [][]string{
    {"1", "2", "3"},
    {"4", "5", "6"},
}
writer := new(strings.Builder)
csvWriter := csv.NewWriter(writer)
csvWriter.WriteAll(data)
fmt.Println(writer.String())
// 1,2,3
// 4,5,6

Deserializing

data := `1,2,3
         4,5,6`
reader := csv.NewReader(strings.NewReader(data))
records, _ := reader.ReadAll()
fmt.Println(records[0][1]) // 2