猿问

将来自多个单元格的数据合并到一个 JSON 对象中

我正在尝试将来自 excel 电子表格的多个单元格的数据组合成一个 JSON 编码的字符串。我不知道该怎么做,下面的代码正在为每个单元创建一个新的 JSON 对象。如何区分要组合成相同 JSON 字符串的单元格?


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"}


函数式编程
浏览 244回答 2
2回答

胡说叔叔

如果我正确理解您的请求,您只需要定义根元素,将单元格添加到其中并编组此元素而不是单个单元格。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

慕婉清6462132

您可以使用a, err := row.Cells[3].String()b, err := row.Cells[5].String()像这个工作代码:package mainimport (    "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"}输入文件内容:1   10  100 1000    10000   a2   20  200 2000    20000   b3   30  300 3000    30000   c4   40  400 4000    40000   d5   50  500 5000    50000   e
随时随地看视频慕课网APP

相关分类

Go
我要回答