我有一個動態的 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
格式我不知道怎么給。
uj5u.com熱心網友回復:
您似乎是從資料庫中獲取資料,然后將其保存到文本檔案中。最好的方法是從資料庫中獲取資料,然后簡單地遍歷每一行。目前尚不清楚為什么這個問題被提出為轉換 json 資料,如果它可以從資料庫中獲得。不是將其轉換為 json,而是直接將值寫入檔案。
您可以打開一個檔案,以便附加每個條目,然后在完成該檔案后關閉。我提供了一個示例檔案,無論回傳的行數如何(我假設它是資料庫中每一行的新行)或列數,它都能為您提供所需的輸出。
以下代碼經過測驗并列印: luis | gomez | 87846516
OS.APPEND 每次寫入時都會追加一個新行。因此,如果您多次運行此代碼,它不會覆寫它而是添加到檔案中。
package main
import (
"database/sql"
"fmt"
"log"
"os"
"strings"
_ "github.com/go-sql-driver/mysql"
)
type DbDao struct {
db *sql.DB
}
var db DbDao
func (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
}
uj5u.com熱心網友回復:
首先創建名為 struct 物件Person,然后定義一個String函式來做你想做的事
package main
import (
"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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364108.html
標籤:走
上一篇:Go并發回圈邏輯
