Конвертировать JSON файл в csv в golang - PullRequest
0 голосов
/ 01 февраля 2020

следующий код работает успешно, он конвертирует мой json файл в файл csv. Но я хотел бы добавить заголовки для каждого из моих столбцов в файл CSV. К сожалению, я не могу узнать, как это сделать. Если у кого-то есть идея, это было бы очень полезно.

С уважением

package main

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

type People struct {
    Name string
    Craft string
}

type General struct {
    People []People
    Number int
    Message string
}

func main() {
    // Reading data from JSON File  
    response, err := http.Get("http://api.open-notify.org/astros.json")
    if err != nil {
        fmt.Printf("The Http request failed with error %s\n", err)
    }

    data,_ := ioutil.ReadAll(response.Body)
    //fmt.Println(string(data))
    // Unmarshal JSON data
    var general General
    json.Unmarshal([]byte(data), &general)
    //fmt.Printf("First person: %s, Message: %s", general.People[0].Name, general.Message)

    // Create a csv file
    csvdatafile, err := os.Create("./astros.csv")
    if err != nil {
        fmt.Println(err)
    }
    defer csvdatafile.Close()
    // Write Unmarshaled json data to CSV file
    w := csv.NewWriter(csvdatafile)
    for _, obj := range general.People {    
        fmt.Println("Are you going into the for ?")
        var record []string
        record = append(record, strconv.Itoa(general.Number), general.Message)
        record = append(record, obj.Name, obj.Craft)
        w.Write(record)
        fmt.Println("Are you coming here")
        record = nil
    }
    w.Flush()
    fmt.Println("Appending succed")

}

1 Ответ

1 голос
/ 01 февраля 2020

Хорошо, если вы хотите только для этого примера вы можете просто записать заголовки столбцов в файл перед оператором for, то есть:

w := csv.NewWriter(csvdatafile)
//new code 
var header []string
header = append(header, "Number")
header = append(header, "Message")
header = append(header, "Name")
header = append(header, "Craft")
w.Write(header)

for _, obj := range general.People {   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...