2 回答

TA贡献1820条经验 获得超3个赞
要解决您的 json 问题,您可以使用一个结构并用 json:"omitempty" 标记每个字段:
package main
import (
"encoding/json"
"fmt"
)
type foostruct struct {
Myfoo string `json:"myfoo,omitempty"`
Yourfoo string `json:"yourfoo,omitempty"`
Ourfoo string `json:"ourfoo,omitempty"`
}
func main() {
j := []byte("{\"myfoo\":\"mine\", \"yourfoo\":\"yours\"}")
fstruct := &foostruct{}
err := json.Unmarshal(j, fstruct)
if err != nil {
panic(err)
}
b, err := json.Marshal(fstruct)
if err != nil {
panic(err)
}
fmt.Println(string(b))
}
您将看到输出不包含字段“ourfoo”:
{"myfoo":"mine","yourfoo":"yours"}
在这里试试:http : //play.golang.org/p/zKwFaxbLJu

TA贡献1995条经验 获得超2个赞
我在我的应用程序上使用 map 而不是 struct ,尤其是当我想向客户端返回一个 json 答案时。它给了我更多的灵活性。请看看这个:
package main
import (
"encoding/json"
"fmt"
)
func main() {
m := make(map[string]interface{})
m["appVersion"] = "0.0.1"
m["uploadStatus"] = "success"
strJson, _ := json.Marshal(m)
str := string(strJson)
fmt.Println("---ENCODING--")
fmt.Println(str)
//put it back
fmt.Println("---DECODING--")
n := make(map[string]interface{})
json.Unmarshal([]byte(str), &n)
for key, val := range n {
fmt.Println(key, ":", val)
}
}
输出是:
---ENCODING--
{"appVersion":"0.0.1","uploadStatus":"success"}
---DECODING--
appVersion : 0.0.1
uploadStatus : success
你可以在这里查看:http : //play.golang.org/p/h4b4-nkZ4M
- 2 回答
- 0 关注
- 217 浏览
添加回答
举报