golang json使用10、-10、0表示,true、false、null

复制代码
package main

import (
    "encoding/json"
    "errors"
    "fmt"
)

type A struct {
    Br Boolean `json:"br"`
}

func main() {
    var c A
    json.Unmarshal([]byte(`{"br":"true"}`), &c)
    fmt.Println(c)

}

type Boolean int

const (
    isTrue  = 10
    isFalse = -10
    isNull  = 0
)

func (b Boolean) MarshalJSON() (by []byte, err error) {
    switch b {
    case isTrue:
        by = []byte("true")
    case isFalse:
        by = []byte("false")
    default:
        by = []byte("null")
    }
    return
}

func (b *Boolean) UnmarshalJSON(data []byte) error {
    switch string(data) {
    case `1`, `t`, `T`, `true`, `TRUE`, `True`, `"1"`, `"t"`, `"T"`, `"true"`, `"TRUE"`, `"True"`:
        *b = isTrue
    case `0`, `f`, `F`, `false`, `FALSE`, `False`, `"0"`, `"f"`, `"F"`, `"false"`, `"FALSE"`, `"False"`:
        *b = isFalse
    case `null`:
        *b = isNull
    default:
        return errors.New("不是正确类型")
    }
    return nil
}

func (b Boolean) IsNull() bool {
    return b == isNull
}

func (b Boolean) IsBool() bool {
    return b == isTrue
}
复制代码

 

posted @   大道至简,小而蕴真  阅读(168)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示