将多个单元格的数据组合成一个JSON对象

我试图将来自Excel电子表格的多个单元格的数据合并成一个JSON编码的string。 我不知道如何做,下面的代码是每个单元格创build一个新的JSON对象。 如何区分单元格以组合成相同的JSONstring?

package main import ( "fmt" "github.com/tealeg/xlsx" "encoding/json" ) func main() { excelFileName := "/Users/isaacmelton/Desktop/Test_Data.xlsx" xlFile, err := xlsx.OpenFile(excelFileName) if err != nil { fmt.Printf("Cannot parse data") } for _, sheet := range xlFile.Sheets { for _, row := range sheet.Rows { fmt.Printf("\n") for x, cell := range row.Cells { if x == 3 || x == 5 { data := map[string]string{"d_name": cell.String(), "name": cell.String()} json_data, _ := json.Marshal(data) fmt.Println(string(json_data)) } } } } } 

运行上面的代码导致以下结果:

 {"foo":"cell1","bar":"cell1"} {"foo":"cell2","bar":"cell2"} 

我期待这样的事情:

 {"foo":"cell1", "bar":"cell2"} 

如果我理解你的请求,你只需要定义根元素,添加单元格到这个元素而不是单个单元格。

 root := []map[string]string{} for x, cell := range row.Cells { if x == 3 || x == 5 { root = append(root, map[string]string{"d_name": cell.String(), "name": cell.String()}) } } json_data, _ := json.Marshal(root) fmt.Println(string(json_data)) 

http://play.golang.org/p/SHnShHvW_0

你可以使用

 a, err := row.Cells[3].String() b, err := row.Cells[5].String() 

像这样的工作代码:

 package main import ( "encoding/json" "fmt" "github.com/tealeg/xlsx" ) func main() { xlFile, err := xlsx.OpenFile(`Test_Data.xlsx`) if err != nil { panic(err) } for _, sheet := range xlFile.Sheets { for _, row := range sheet.Rows { //for x, cell := range row.Cells { //if x == 3 || x == 5 { a, err := row.Cells[3].String() if err != nil { panic(err) } b, err := row.Cells[5].String() if err != nil { panic(err) } data := map[string]string{"d_name": a, "name": b} json_data, err := json.Marshal(data) if err != nil { panic(err) } fmt.Println(string(json_data)) //} //} } } } 

输出:

 {"d_name":"1000","name":"a"} {"d_name":"2000","name":"b"} {"d_name":"3000","name":"c"} {"d_name":"4000","name":"d"} {"d_name":"5000","name":"e"} 

input文件内容:

 1 10 100 1000 10000 a 2 20 200 2000 20000 b 3 30 300 3000 30000 c 4 40 400 4000 40000 d 5 50 500 5000 50000 e