package office import ( "encoding/json" "io/ioutil" "os" "regexp" "strings" ) // extractTextFromJSON 递归地从 JSON 数据中提取纯文本 func extractTextFromJSON(data interface{}) []string { var texts []string switch v := data.(type) { case map[string]interface{}: for _, value := range v { texts = append(texts, extractTextFromJSON(value)...) } case []interface{}: for _, item := range v { texts = append(texts, extractTextFromJSON(item)...) } case string: texts = append(texts, v) default: // 其他类型忽略 } return texts } func json2txt(filename string) (string, error) { file, err := os.Open(filename) if err != nil { return "", err } defer file.Close() byteValue, err := ioutil.ReadAll(file) if err != nil { return "", err } var jsonData interface{} err = json.Unmarshal(byteValue, &jsonData) if err != nil { return "", err } plainText := extractTextFromJSON(jsonData) // 将切片中的所有字符串连接成一个字符串 plainTextStr := strings.Join(plainText, " ") // 移除多余的空格 re := regexp.MustCompile(`\s+`) plainTextStr = re.ReplaceAllString(plainTextStr, " ") // 移除开头和结尾的空格 plainTextStr = strings.TrimSpace(plainTextStr) return plainTextStr, nil }