我試圖通過Go中的嵌入式結構以{{"s":"v1", "t":"v2"}, {"s":"v3", "t":"v4"}, etc}
的形式生成JSON對象。在Go的嵌入式結構中編寫任意的JSON對象
它所有的工作了罰款時type Problems []Problem
所有Problem
項目事先已知的,如可以在下面FUNC ONE()
可以看到和Playground demo這裏。但是,如果某些K:V對包含空值,我想避免使用{{a},{},{c}}
而不是所需的{{a},{c}}
,如下面的func TWO()
和演示中所示。
或者,我怎麼能撰寫probs := Problems{prob0, prob1, prob2, etc}
以下任意不知道時間提前一個概率項目是否會被添加或省略?
package main
import (
"encoding/json"
"fmt"
)
type Problem struct {
S string `json:"s,omitempty"`
T string `json:"t,omitempty"`
}
type Problems []Problem
func main() {
ONE()
TWO()
}
func ONE() {
prob0 := Problem{S: "s0", T: "t0"}
prob1 := Problem{S: "s1", T: "t1"}
prob2 := Problem{S: "s2", T: "t2"}
probs := Problems{prob0, prob1, probe}
// fmt.Println(probs) // CORRECT: [{s0 t0} {s1 t1} {s2 t2}]
b, _ := json.Marshal(probs)
fmt.Println(string(b))
// CORRECT: [{"s":"s0","t":"t0"},{"s":"s1","t":"t1"},{"s":"s2","t":"t2"}]``
}
func TWO() {
prob0 := Problem{S: "s0", T: "t0"}
prob1 := Problem{S: "", T: ""} // empty values omited BUT NOT {}
prob2 := Problem{S: "s2", T: "t2"}
probs := Problems{prob0, prob1, probe}
// fmt.Println(probs)
// GOT: [{s0 t0} { } {s2 t2}]
// WANTED: [{s0 t0} {s2 t2}]
b, _ := json.Marshal(probs)
fmt.Println(string(b))
// GOT: [{"s":"s0","t":"t0"},{},{"s":"s2","t":"t2"}]
// WANTED: [{"s":"s0","t":"t0"},{"s":"s2","t":"t2"}]
}
是的,我希望有一個'json:「,omitempty」'類型的魔法藥水來完全省略空結構,從而避免了創建半大JSON對象的一次,然後再次處理以刪除空結構。 :)但謝謝你的回答。 – parens 2015-04-01 12:32:56