JSON Unmarshal

novtopro · 2016-07-22 09:13:03 · 3029 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2016-07-22 09:13:03 的主题,其中的信息可能已经有所发展或是发生改变。

我想将JSON中的0或者1 unmarshal成false或者true,没有头绪,想问问大家。 新手,感觉有点无从着手


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3029 次点击  
加入收藏 微博
8 回复  |  直到 2016-07-22 16:21:53
blov
blov · #1 · 9年之前

不建议这么搞吧。真要搞,这里有一个思路

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
}
novtopro
novtopro · #2 · 9年之前

谢谢你的回复。为什么不建议呢?

blov
blov · #3 · 9年之前

存为 int 类型,使用时和1比较就可以了

novtopro
novtopro · #4 · 9年之前
if obj.EnabledGlobalColor {
}

V.S.

if obj.EnabledGlobalColor == 1 { }

个人觉得上面那种好。和1比较没有说服我。不过非常感谢你提供的建议。

blov
blov · #5 · 9年之前

那为啥不生成 json 时,就生成为 true / false 呢?

novtopro
novtopro · #6 · 9年之前

因为API不是我写的啊,我没有办法。不过你倒是提醒我了,我应该叫那个人好好反思一下。

blov
blov · #7 · 9年之前

哈哈哈。使用 UnmarshalJSON 的方式,它的类型也不是 bool,放入 if 中的也得做下类型转换。

novtopro
novtopro · #8 · 9年之前

不用的,你可以测试一下。我在go1.6中测试的。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传