sql >> データベース >  >> RDS >> Mysql

Golangを使用してMySQLテーブルをJSONにダンプする

    また、データベーステーブルをjsonにダンプする必要があり、これが私が達成した方法です:(このトピックの他の回答とは異なり、この回答のおかげですべてが文字列ではありません: https://stackoverflow.com/a/17885636/4124416 、整数フィールドを正しく取得できました)

    func getJSON(sqlString string) (string, error) {
        rows, err := db.Query(sqlString)
        if err != nil {
            return "", err
        }
        defer rows.Close()
        columns, err := rows.Columns()
        if err != nil {
            return "", err
        }
        count := len(columns)
        tableData := make([]map[string]interface{}, 0)
        values := make([]interface{}, count)
        valuePtrs := make([]interface{}, count)
        for rows.Next() {
            for i := 0; i < count; i++ {
              valuePtrs[i] = &values[i]
            }
            rows.Scan(valuePtrs...)
            entry := make(map[string]interface{})
            for i, col := range columns {
                var v interface{}
                val := values[i]
                b, ok := val.([]byte)
                if ok {
                    v = string(b)
                } else {
                    v = val
                }
                entry[col] = v
            }
            tableData = append(tableData, entry)
        }
        jsonData, err := json.Marshal(tableData)
        if err != nil {
            return "", err
        }
        fmt.Println(string(jsonData))
        return string(jsonData), nil 
    }
    

    出力例は次のとおりです。

    [{"ID":0,"Text":"Zero"},{"ID":1,"Text":"One"},{"ID":2,"Text":"Two"}]
    


    1. エラー1045(28000)を克服する方法:ユーザー'ODBC' @'localhost'(パスワードを使用:NO)のアクセスが永続的に拒否されました

    2. ユーザー名からuser_groupへのユーザーの操作

    3. インデックスを取得して先頭の%ワイルドカードを探す1つの方法

    4. MariaDBでUNIONを使用する場合の「エラー1222(21000):使用されるSELECTステートメントの列数が異なる」を修正