2015-09-04 63 views
3
type JobTitles struct { 
    Titles []string `json:"titles"` 
} 

chiefTitles := []string{"CEO", "CFO", null, "CMO"} 

jsonOut := JobTitles{chiefTitles} 

发送空在上面的代码,我想能够发送在我的JSON字符串数组中的一个值。然而,上述将无法编译,如果我双引号添加到它成为一个字符串不是null值。围棋在JSON

我怎样才能在走我的JSON响应发送

This文章似乎有帮助,但看起来是我的问题的逆..

+3

在进入一个'string'不能'nil'(*不*'null')。 'Titles [] * string'会为你工作吗? (通过文字初始化会更难一些)。 –

+0

你不能使用'null',因为Go中的值是'nil',并且如果对于一个字符串,你不能使用它,它必须是一个字符串指针。 – evanmcdonnal

+0

我改变了标题。对不起我的无知 - 不要对Go社区不敬!你能举一个如何初始化这个例子吗? – Chris

回答

4

为了表示该类型具有值“空”它必须是一个指针。问题不是你不能使用null,而是一个字符串不能有这个值。这是我在操场上做的一个简单例子。 https://play.golang.org/p/SXO5sBl2mR

package main 

import "fmt" 
import "encoding/json" 

type Test struct { 
    A *string 
    B *string 
} 

func main() { 
     s := "Something" 
     t := Test{A:&s, B:nil} 
     b, err := json.Marshal(t) 
     if err != nil { 
      fmt.Println(err) 
     } 
    fmt.Println(string(b)) 
} 

由于DaveC使用指针制定者动初始化有点更麻烦提到的,但你可以使用相同类型的结构我有以上的;声明一个字符串,使用&该字符串在复合文字中。

+0

感谢您的评论并回答@evanmcdonnal – Chris

2

你将不得不使用*string代替,并创建一个辅助函数,使其更容易,东西线沿线的:

func main() { 
    chiefTitles := []*string{sP("CEO"), sP("CFO"), nil, sP("CMO")} 

    b, _ := json.Marshal(JobTitles{chiefTitles}) 

    fmt.Println(string(b)) 
} 

type JobTitles struct { 
    Titles []*string `json:"titles"` 
} 

func sP(s string) *string { 
    return &s 
} 

playground

+0

谢谢你的时间和帮助,这很有道理! – Chris