doupeng8494 2013-10-28 11:35
浏览 852
已采纳

在Golang中解编json:必填字段?

Is it possible to generate an error if a field was not found in json while unmarshaling in Golang? I could not find it in documentation. Is there any tag that specifies the field as required?

  • 写回答

2条回答 默认 最新

  • duanbinian2243 2013-10-28 11:53
    关注

    There is no tag in the encoding/json package that sets a field to "required". You will either have to write your own MarshalJSON() method, or do a post check for missing fields.

    To check for missing fields, you will have to use pointers in order to distinguish between missing/null and zero values:

    type JsonStruct struct {
        String *string
        Number *float64
    }
    

    Full working example:

    package main
    
    import (
        "fmt"
        "encoding/json"
    )
    
    type JsonStruct struct {
        String *string
        Number *float64
    }
    
    var rawJson = []byte(`{
        "string":"We do not provide a number"
    }`)
    
    
    func main() {
        var s *JsonStruct
        err := json.Unmarshal(rawJson, &s)
        if err != nil {
            panic(err)
        }
    
        if s.String == nil {
            panic("String is missing or null!")
        }
    
        if s.Number == nil {
            panic("Number is missing or null!")
        }
    
        fmt.Printf("String: %s  Number: %f
    ", *s.String, *s.Number)
    }
    

    Playground

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档