如何在Golang中将动态JSON转换为指定分隔格式的TXT文件
Go语言JSON转自定义分隔符格式TXT实现方案
首先需保证输入的JSON为标准合法格式(键与字符串值需用双引号包裹),示例标准输入如下:
{"name": "luis", "last name": "gomez", "id_number": 87846516}
实现核心逻辑为:先将JSON反序列化转为Go可操作的数据结构,提取所有字段值后按|拼接,再写入文件。以下分两种场景提供实现:
场景1:JSON字段固定可预知
优先使用结构体绑定的方案,字段输出顺序完全可控,性能更高:
package main import ( "encoding/json" "fmt" "os" ) // 定义与JSON字段对应的结构体,标签匹配JSON键名 type User struct { Name string `json:"name"` LastName string `json:"last name"` IdNumber int `json:"id_number"` } func main() { // 你的原始JSON字节数据 jsonData := []byte(`{"name": "luis", "last name": "gomez", "id_number": 87846516}`) // 1. 反序列化JSON到结构体 var user User err := json.Unmarshal(jsonData, &user) if err != nil { panic(err) } // 2. 按要求拼接字段值 outputStr := fmt.Sprintf("%s | %s | %d", user.Name, user.LastName, user.IdNumber) // 3. 写入TXT文件,Go 1.16+推荐使用os.WriteFile替代废弃的ioutil.WriteFile err = os.WriteFile("test.txt", []byte(outputStr), 0644) if err != nil { panic(err) } }
场景2:JSON结构完全动态(字段不固定)
如果无法提前确定JSON字段,可反序列化为map[string]interface{}做通用处理:
注意:Go语言中map的遍历顺序是无序的,如果需要输出顺序和JSON原始字段顺序一致,需额外使用第三方有序JSON解析库,或提前指定字段提取顺序。
package main import ( "encoding/json" "fmt" "os" "strings" ) func main() { // 你的原始JSON字节数据 jsonData := []byte(`{"name": "luis", "last name": "gomez", "id_number": 87846516}`) // 1. 反序列化到通用map结构 var dataMap map[string]interface{} err := json.Unmarshal(jsonData, &dataMap) if err != nil { panic(err) } // 2. 提取所有值并转成字符串 var valueStrs []string for _, v := range dataMap { valueStrs = append(valueStrs, fmt.Sprintf("%v", v)) } // 3. 用 | 拼接所有值 outputStr := strings.Join(valueStrs, " | ") // 4. 写入文件 err = os.WriteFile("test.txt", []byte(outputStr), 0644) if err != nil { panic(err) } }
如果需要固定输出顺序,可提前定义字段顺序切片,按切片顺序取值即可,示例如下:
// 按你需要的输出顺序定义JSON键名 fieldOrder := []string{"name", "last name", "id_number"} var valueStrs []string for _, field := range fieldOrder { if v, ok := dataMap[field]; ok { valueStrs = append(valueStrs, fmt.Sprintf("%v", v)) } }
内容的提问来源于stack exchange,提问作者Luis Enrique Gómez Pérez
相关产品推荐
相关产品推荐

