json - 在golang中将JSON文件转换为csv
问题描述
以下代码运行成功,它将我的 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")
}
解决方案
好吧,如果你只想要这个例子,你可以在语句之前将列标题写入文件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 {
推荐阅读
- python - Numpy:随机选择 9/10 个元素并保存剩余
- sql - 如果违反外键约束,如何插入表
- git - Visual Studio 2018 的 Git 扩展中的“Cherry-Pick”菜单项有什么作用?
- php - 无法分配内存错误和网页崩溃
- python - Numpy:将数组的每个元素与所有其他元素进行比较(±常数)
- python - 如何计算等高线内的面积?
- python - 熊猫:我想在时间序列中创建一个列,其中值取决于前一行的值
- python - 我试图找到快乐的数字,但我的程序进入了无限循环
- raspberry-pi - 使用 bash 脚本打开/关闭本地 wifi 设备
- python - __init__ 中的多索引 DataArray