2015-09-04 64 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