2015-10-16 52 views
-2

我有一个struct什么,我需要元帅消耗的web服务,但在我的测试中,我的元帅函数只编码一个领域:结构没有被完全封

type DataRows []struct { 
    mData interface{} 
} 

type DataColumns []struct { 
    mColumnName  string 
    mColumnType  int 
    mColumnPrecision int 
    mColumnScale  int 
} 
type DataTables []struct { 
    mDataColumns DataColumns 
    mDataRows DataRows 
    mIndex  int 
} 

type CFFDataSet struct { 
    mDataTables DataTables 
    mUser  string 
    DBServer int 
} 

func main() { 
    ds := CFFDataSet{ 
     mDataTables: DataTables{{ 
      mDataColumns: DataColumns{{ 
       mColumnName:  "Test", 
       mColumnType:  1, 
       mColumnPrecision: 1, 
       mColumnScale:  1, 
      }}, 
      mDataRows: DataRows{{ 
       mData: "Test", 
      }}, 
      mIndex: 0, 
     }}, 
     mUser: "Teste", 
     DBServer: 2, 
    } 

    marchaled, _ := json.Marshal(ds) 
    fmt.Println(string(marchaled)) 
} 

正在恢复

$ go run getrest.go 
{"DBServer":2} 

有人可以给我一个提示,为什么不工作?

+0

@JimB:你选择一个重复的是穷人。它不包含对标签的解释。 – peterSO

+0

@peterSO:同意。这得到如此频繁的询问,我现在很难找到好的 – JimB

回答

1

所有其他字段都是未导出的(就像其他语言中的私人字样),解组器无法访问它们。这是由字段名称中的第一个字母的情况指定的,需要为大写。

作为参考,下面是一个使用结构中的字段名称与json的字段名称不同的示例;

var jsonBlob = []byte(`[ 
    {"Name": "Platypus", "Purchase": "Monotremata"}, 
    {"Name": "Quoll", "Purchase": "Dasyuromorphia"} 
]`) 
type Animal struct { 
    Name string 
    Order string `json:"Purchase"` 
} 
var animals []Animal 
err := json.Unmarshal(jsonBlob, &animals) 
if err != nil { 
    fmt.Println("error:", err) 
} 
fmt.Printf("%+v", animals) 

https://play.golang.org/p/iJqaXQY7Ch

+1

但我所需要的web服务消耗,对象以m小写开头。我如何消耗他? –

+0

我只是将m更换为上部并正常工作。非常感谢 –

+1

@PedoSouza另一种处理方式是使用json注释,比如'json:“mTheActualNameCouldBeAnything”' – evanmcdonnal