golang如何格式化txt?

我有一个动态的 json,我将其转换为 txt: JSON 示例:

   {name: luis, last name: gomez, id_number: 87846516}

我转换它的代码是这样的:

    file, _: = json.MarshalIndent (string (jsonData), "", "")
    data: = ioutil.WriteFile ("test.txt", file, 0644)

我成功地将它转换为txt,但我需要给它一个特定的格式,其中只有值出现,没有标签,分隔如下:

     luis | gomez | 87846516

格式我不知道怎么给它。


ABOUTYOU
浏览 175回答 2
2回答

森栏

您似乎正在从数据库中获取数据,然后将其保存到文本文件中。最好的方法是从数据库中获取数据,然后简单地遍历每一行。目前尚不清楚为什么将问题提出为转换 json 数据,如果它可以从数据库中获得。与其将其转换为 json,不如直接将值写入文件。您可以打开一个文件,以便附加每个条目,然后在完成文件后关闭。我提供了一个示例文件,无论返回的行数(我假设数据库中的每一行都是一个新行)或列数,它都会为您提供所需的输出。以下代码经过测试并打印:luis | gomez | 87846516 OS.APPEND 将在每次写入时附加一个新行。因此,如果您多次运行此代码,它不会覆盖它而是添加到文件中。package mainimport (    "database/sql"    "fmt"    "log"    "os"    "strings"    _ "github.com/go-sql-driver/mysql")type DbDao struct {    db *sql.DB}var db DbDaofunc (d *DbDao) Init(connstr string) error {    db, err := sql.Open("mysql", connstr)    if err != nil {        return err    }    err = db.Ping()    if err != nil {        return err    }    d.db = db    return nil}func main() {    dblogin := os.Getenv("DBLOGIN")    dbString := fmt.Sprintf("root:%s@/testDB", dblogin)    err := db.Init(dbString)    if err != nil {        log.Fatal("Failed to create db connection:", err.Error())    }    f, err := os.OpenFile("text.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)    if err != nil {        log.Fatalf("ERROR: error opening file: %v", err)    }  defer f.Close()    queryText := "select * from stackOverflow"    rows, err := db.db.Query(queryText)    if err != nil {        log.Fatal(err)    }    columns, err := rows.Columns()    if err != nil {        log.Fatal(err)    }    count := len(columns)    values := make([]interface{}, count)    scanArgs := make([]interface{}, count)    for i := range values {        scanArgs[i] = &values[i]    }    for rows.Next() {        err := rows.Scan(scanArgs...)        if err != nil {            log.Fatal(err)        }        concat := make([]string, 0)        for i, _ := range columns {            v := values[i]            b, ok := v.([]byte)            if ok {                concat = append(concat, string(b))            } else {                concat = append(concat, fmt.Sprintf("%v", v))            }        }        line := strings.Join(concat, " | ")        fmt.Println(line)        _, err = f.Write([]byte(fmt.Sprintf("%s\n", line)))        if err != nil {            log.Fatal(err)        }    }    return}

白板的微信

首先创建 struct object called Person,然后定义一个String函数来做你想做的事package mainimport (    "encoding/json"    "strconv")type Person struct {    Name     string `json:"name"`    LastName string `json:"last_name"`    IdNumber int    `json:"id_number"`}// Convert to csv separated by " | "func (p Person) String() string {    return p.Name + " | " + p.LastName + " | " + strconv.Itoa(p.IdNumber)}func main() {    // json data    jsonData := map[string]interface{}{        "name":      "luis",        "last_name": "gomez",        "id_number": 87846516,    }    person := Person{}    jsonDataByte, _ := json.Marshal(jsonData)    json.Unmarshal(jsonDataByte, &person)    // print person    println(person.String())}答案是:luis | gomez | 87846516
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go