我想将JSON中的0或者1 unmarshal成false或者true,没有头绪,想问问大家。 新手,感觉有点无从着手
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
不建议这么搞吧。真要搞,这里有一个思路
package main import "fmt" import "encoding/json" func main() { var strjson = `{"isok":1,"name":"polaris"}` var model = struct { Name string `json:"name"` IsOk intbool `json:"isok"` }{} err := json.Unmarshal([]byte(strjson), &model) if err != nil { fmt.Println(err) return } fmt.Println(model.IsOk, model.Name) } type intbool bool func (this *intbool) UnmarshalJSON(data []byte) error { if "1" == string(data) { *this = intbool(true) } else { *this = intbool(false) } return nil }
谢谢你的回复。为什么不建议呢?
存为 int 类型,使用时和1比较就可以了
if obj.EnabledGlobalColor { }
V.S.
if obj.EnabledGlobalColor == 1 { }
个人觉得上面那种好。和1比较没有说服我。不过非常感谢你提供的建议。
那为啥不生成 json 时,就生成为 true / false 呢?
因为API不是我写的啊,我没有办法。不过你倒是提醒我了,我应该叫那个人好好反思一下。
哈哈哈。使用 UnmarshalJSON 的方式,它的类型也不是 bool,放入 if 中的也得做下类型转换。
不用的,你可以测试一下。我在go1.6中测试的。
`单行代码`
不建议这么搞吧。真要搞,这里有一个思路
谢谢你的回复。为什么不建议呢?
存为 int 类型,使用时和1比较就可以了
V.S.
个人觉得上面那种好。和1比较没有说服我。不过非常感谢你提供的建议。
那为啥不生成 json 时,就生成为 true / false 呢?
因为API不是我写的啊,我没有办法。不过你倒是提醒我了,我应该叫那个人好好反思一下。
哈哈哈。使用 UnmarshalJSON 的方式,它的类型也不是 bool,放入 if 中的也得做下类型转换。
不用的,你可以测试一下。我在go1.6中测试的。