douguai6716 2013-12-30 05:29
浏览 86
已采纳

如果将值为null的字符串编码的json int解组,则使用null之前的值

I am trying to unmarshal json that contains ints encoded as strings. Using tags to specify that the field is encoded as a string works, but I am running into issues when the field is null. The main problem, it seems, is that the null is not encoded as a string so the parser ignores it and keeps going. The problem is that it jams in the previously decoded value for some reason.

Any ideas on how I can get this parsing correctly?

I have the following code:

package main

import (
    "encoding/json"
    "log"
)

type Product struct {
    Price int `json:",string,omitempty"`
}

func main() {
    data := `
[
{"price": "1"},
{"price": null},
{"price": "2"}
]
`

    var products []Product
    if err := json.Unmarshal([]byte(data), &products); err != nil {
        log.Printf("%#v", err)
    }
    log.Printf("%#v", products)

}

Output:

[]main.Product{main.Product{Price:1}, main.Product{Price:1}, main.Product{Price:2}}

Code on go playground

  • 写回答

1条回答 默认 最新

  • douxianwu2221 2013-12-30 06:41
    关注

    Feels like a bug in the json package.

    You can work around it with a custom Unmarshaller, like this, although it may be annoying if you've got a complex struct:

    func (p *Product) UnmarshalJSON(b []byte) error {
       m := map[string]string{}
       err := json.Unmarshal(b, &m)
       if err != nil {
          return err
       } 
       if priceStr, ok := m["price"]; ok {
          p.Price, _ = strconv.Atoi(priceStr)
       }
       return nil
    }
    

    http://play.golang.org/p/UKjfVqHCGi

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向