Golang从文本文件创建结构体并转换为JSON
Golang从文本文件创建结构体并转换为JSON 你好!我有一个包含多行的无组织文本文件。我需要将这个文本文件转换为 JSON 文件。 文本文件示例:
value value
value value value value
value value valu value value
.... (以此类推)
将上述文本文件转换为 JSON 后将是: { “row1”: { “value1”:value “value2”:value } “row2”: { “value1”:value “value2”:value “value3”:value “value4”:value } “row3”: { “value1”:value “value2”:value “value3”:value “value4”:value “value5”:value }
首先,我必须创建一个动态结构体,然后转换为 JSON,请帮忙。
更多关于Golang从文本文件创建结构体并转换为JSON的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
是否可以使用切片? 使用空格分割每一行,然后使用空格修剪每个段,之后你可以使用一个结构体
type Row struct {
Index int
Name string
Values []int
}
或者一个映射
map[string][]int
更多关于Golang从文本文件创建结构体并转换为JSON的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
package main
import (
"encoding/json"
"fmt"
"os"
"strings"
)
// 动态结构体使用map实现
func processTextFile(inputFile, outputFile string) error {
// 读取文本文件
data, err := os.ReadFile(inputFile)
if err != nil {
return err
}
// 按行分割
lines := strings.Split(string(data), "\n")
result := make(map[string]map[string]string)
// 处理每一行
for i, line := range lines {
if strings.TrimSpace(line) == "" {
continue
}
// 分割每行的值(按空白字符分割)
values := strings.Fields(line)
rowMap := make(map[string]string)
// 为每个值创建键
for j, val := range values {
key := fmt.Sprintf("value%d", j+1)
rowMap[key] = val
}
// 添加到结果中
rowKey := fmt.Sprintf("row%d", i+1)
result[rowKey] = rowMap
}
// 转换为JSON
jsonData, err := json.MarshalIndent(result, "", " ")
if err != nil {
return err
}
// 写入输出文件
return os.WriteFile(outputFile, jsonData, 0644)
}
func main() {
// 示例使用
err := processTextFile("input.txt", "output.json")
if err != nil {
fmt.Printf("处理失败: %v\n", err)
return
}
fmt.Println("转换完成")
}
// 如果需要更灵活的处理(值可能包含空格)
func processTextFileAdvanced(inputFile, outputFile string) error {
data, err := os.ReadFile(inputFile)
if err != nil {
return err
}
lines := strings.Split(string(data), "\n")
result := make(map[string]interface{})
for i, line := range lines {
line = strings.TrimSpace(line)
if line == "" {
continue
}
// 使用正则表达式分割,保留连续空白作为分隔符
values := strings.Fields(line)
rowData := make(map[string]string)
for j, value := range values {
rowData[fmt.Sprintf("value%d", j+1)] = value
}
result[fmt.Sprintf("row%d", i+1)] = rowData
}
jsonData, err := json.MarshalIndent(result, "", " ")
if err != nil {
return err
}
return os.WriteFile(outputFile, jsonData, 0644)
}
// 使用结构体切片的方式
type RowData struct {
Values map[string]string `json:"values"`
}
func processWithStruct(inputFile, outputFile string) error {
data, err := os.ReadFile(inputFile)
if err != nil {
return err
}
lines := strings.Split(string(data), "\n")
var rows []RowData
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" {
continue
}
values := strings.Fields(line)
rowMap := make(map[string]string)
for i, val := range values {
rowMap[fmt.Sprintf("value%d", i+1)] = val
}
rows = append(rows, RowData{Values: rowMap})
}
// 转换为JSON
jsonData, err := json.MarshalIndent(rows, "", " ")
if err != nil {
return err
}
return os.WriteFile(outputFile, jsonData, 0644)
}
这些代码示例展示了三种不同的方法将文本文件转换为JSON。第一种方法使用嵌套的map结构,第二种方法提供了更灵活的处理方式,第三种方法使用结构体切片。所有方法都能处理动态数量的值,并自动生成相应的JSON键名。

