txt转json
【代码】txt转json。
·
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
"strings"
)
type KeyValue struct {
Path string
Value interface{}
}
func main() {
// 打开输入的txt文件
file, err := os.Open("input.txt")
if err != nil {
fmt.Println("无法打开文件:", err)
return
}
defer file.Close()
// 初始化顶级map
result := make(map[string]interface{})
// 逐行读取文件内容
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
if line == "" {
continue
}
// 将每行按照 "path: ... , value: ..." 格式解析
kv := parseLine(line)
if kv != nil {
// 将解析后的键值对插入到map中
keys := strings.Split(kv.Path, ".")
insertIntoMap(result, keys, kv.Value)
}
}
// 检查读取文件时是否出错
if err := scanner.Err(); err != nil {
fmt.Println("读取文件时出错:", err)
return
}
// 将结果转换为JSON格式
jsonData, err := json.MarshalIndent(result, "", " ")
if err != nil {
fmt.Println("生成JSON时出错:", err)
return
}
// 将JSON保存到文件
err = os.WriteFile("output.json", jsonData, 0644)
if err != nil {
fmt.Println("保存JSON文件时出错:", err)
return
}
fmt.Println("JSON成功保存到 output.json 文件中")
}
// 解析每一行,提取 path 和 value
func parseLine(line string) *KeyValue {
// 按照 "path: ... , value: ..." 分割
parts := strings.Split(line, ", value:")
if len(parts) != 2 {
return nil
}
pathPart := strings.TrimPrefix(parts[0], "path:")
valuePart := strings.TrimSpace(parts[1])
// 尝试将值解析为整数,如果失败则存储为字符串
var value interface{}
if valuePart == "" {
value = nil
} else if v, err := parseValue(valuePart); err == nil {
value = v
} else {
value = valuePart
}
return &KeyValue{
Path: strings.TrimSpace(pathPart),
Value: value,
}
}
// 尝试将字符串值解析为int类型
func parseValue(valueStr string) (interface{}, error) {
if valueStr == "" {
return nil, nil
}
return valueStr, nil
}
// 递归地将键插入到map中
func insertIntoMap(result map[string]interface{}, keys []string, value interface{}) {
if len(keys) == 0 {
return
}
key := keys[0]
if len(keys) == 1 {
// 最后一层,插入具体的值
result[key] = value
} else {
if _, exists := result[key]; !exists {
// 如果子map不存在,创建一个
result[key] = make(map[string]interface{})
}
// 递归插入子项
insertIntoMap(result[key].(map[string]interface{}), keys[1:], value)
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)