2017-10-23 8 views
1

マップをJSON文字列に変換しようとしています。しかし、私のコードは数字の配列を生成するようです。私はlog.Println(mapper)のコメントを解除する場合はここでマップをjsonに変換するとゴランの整数が多くなります

は私main.goが

package main 

import (
    "encoding/json" 
    "log" 
) 

type column struct { 
    field string 
    fieldType string 
} 

type tblSchema struct { 
    tbl string 
    columns map[string]column 
} 
func main() { 
    mapper := make(map[string]tblSchema) 
    columns := make(map[string]column) 
    columns["first"] = column{field:"user_id",fieldType:"int(11)"} 
    mapper["t_user"] = tblSchema{tbl:"t_user",columns:columns} 
    jsonString, _ := json.Marshal(mapper) 
    log.Println(jsonString) 
    //log.Println(mapper) 
} 

である。これは、次のような出力

[123 34 116 95 117 115 101 114 34 58 123 125 125] 

を生成し、私は私が間違って何をやっている

map[t_user:{t_user map[first:{user_id int(11)}]}] 

を取得しますか?私はあなたがstringに変換する必要がありjsonStringが

{ 
    "t_user":{ 
     "tbl":"t_user", 
     "columns":{ 
      "first":{ 
       "field":"user_id", 
       "fieldType":"int(11)" 
      } 

    } 
} 

答えて

2

func Marshal(v interface{}) ([]byte, error) 

戻り[]byteを次の形式を持つことを期待:

log.Println(string(jsonString)) 

EDIT

これにより、目的の結果が得られます。

package main 

import (
    "encoding/json" 
    "log" 
) 

type Column struct { 
    Field string 
    FieldType string 
} 

type TblSchema struct { 
    Tbl string 
    Columns map[string]Column 
} 
func main() { 
    mapper := make(map[string]TblSchema) 
    columns := make(map[string]Column) 
    columns["first"] = Column{Field:"user_id",FieldType:"int(11)"} 
    mapper["t_user"] = TblSchema{Tbl:"t_user",Columns:columns} 
    jsonString, _ := json.Marshal(mapper) 
    log.Println(string(jsonString)) 
    log.Println(mapper) 
} 
+1

また、構造体フィールドをエクスポートする必要があります。 tblSchemaとカラムにはエクスポートされたフィールドがないので、これからのjsonは '{" t_user ":{}}'です。 – sberry

+0

@John: 'MarshalIndent'についてはこれを見てください:https://play.golang.org/p/k2H-6-lMz_ –

関連する問題