5

如何修复错误?

http://play.golang.org/p/0UMnUZOUHw

// JSON to CSV in Golang
package main

import (
    "encoding/csv"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "os"
)

type Json struct {
    RecordID int64  `json:"recordId"`
    DOJ      string `json:"Date of joining"`
    EmpID    string `json:"Employee ID"`
}

func main() {
    // reading data from JSON File
    data, err := ioutil.ReadFile("./people.json")
    if err != nil {
        fmt.Println(err)
    }
    // Unmarshal JSON data
    var d []Json
    err = json.Unmarshal([]byte(data), &d)
    if err != nil {
        fmt.Println(err)
    }
    // Create a csv file
    f, _ := os.Create("./people.csv")
    defer f.Close()
    // Write Unmarshaled json data to CSV file
    w := csv.NewWriter(f)

    // How to proceed further?
    /* I am getting errors if i use below
    for _,obj := range d {
      var record []interface{}
      record = append(record, obj.RecordID)
      record = append(record, obj.DOJ)
      record = append(record, obj.EmpID)
      w.Write(record)
    }
    */
}

错误:

cannot use record (type []interface {}) as type []string in function argument
4

2 回答 2

16

例如,

package main

import (
    "encoding/csv"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "os"
    "strconv"
)

type Json struct {
    RecordID int64  `json:"recordId"`
    DOJ      string `json:"Date of joining"`
    EmpID    string `json:"Employee ID"`
}

func main() {
    // reading data from JSON File
    data, err := ioutil.ReadFile("./people.json")
    if err != nil {
        fmt.Println(err)
    }
    // Unmarshal JSON data
    var d []Json
    err = json.Unmarshal([]byte(data), &d)
    if err != nil {
        fmt.Println(err)
    }
    // Create a csv file
    f, err := os.Create("./people.csv")
    if err != nil {
        fmt.Println(err)
    }
    defer f.Close()
    // Write Unmarshaled json data to CSV file
    w := csv.NewWriter(f)
    for _, obj := range d {
        var record []string
        record = append(record, strconv.FormatInt(obj.RecordID, 10))
        record = append(record, obj.DOJ)
        record = append(record, obj.EmpID)
        w.Write(record)
    }
    w.Flush()
}
于 2013-05-10T12:16:40.807 回答
1

csv WriterWrite不期望 a[]interface{}它期望[]string.

于 2013-05-10T12:25:19.467 回答