为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
函数式编程 2021-12-20 10:42:18
我正在尝试将来自 excel 电子表格的多个单元格的数据组合成一个 JSON 编码的字符串。我不知道该怎么做,下面的代码正在为每个单元创建一个新的 JSON 对象。如何区分要组合成相同 JSON 字符串的单元格?package mainimport (    "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"}
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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


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


查看完整回答
反对 回复 2021-12-20
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您可以使用


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

输入文件内容:


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


查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 243 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信