json.unmarshal() – 返回 nil

huangapple go评论89阅读模式
英文:

json.unmarshal() - return nil

问题

我从基础中获取了正常的字节切片(由json.Marshal创建的切片),并尝试对它们进行解码,但是json.Unmarshal()返回nil。

代码:

coded := redis.LoadFromBase()
uncoded := json.Unmarshal(coded, &p)

fmt.Println("字节:", coded)
fmt.Println("解码后:", uncoded)

返回结果:

字节:[123 34 84 105 116 108 101 34 58 34 97 34 44 34 67 111 110 116 101 110 116 34 58 34 98 34 125]
解码后:nil

LoadFromBase()正常工作。

英文:

I get normal slice a bytes from base (slice maked by json.Marshal) and try decode them, but json.unmarshal() - return nil

Code :

coded := redis.LoadFromBase()
uncoded := json.Unmarshal(coded, &p)

fmt.Println("Bytes:", coded)
fmt.Println("Unmarshalled:", uncoded)

Returned:

Bytes: [123 34 84 105 116 108 101 34 58 34 97 34 44 34 67 111 110 116 101 110 116 34 58 34 98 34 125]
Unmarshalled: <nil>

LoadFromBase() works fine

答案1

得分: 5

你正在打印由json.Unmarshal返回的错误,而不是实际解码后的值。它是nil,所以一切都正常。

应该是这样的:

coded := redis.LoadFromBase()
err := json.Unmarshal(coded, &p)
if (err != nil) {
    // 在这里处理错误
}

fmt.Println("字节:", coded)
fmt.Println("解码后:", p)
英文:

You are printing the error returned by json.Unmarshal not the actual decoded value. It is nil so everything is fine.

It should be:

coded := redis.LoadFromBase()
err := json.Unmarshal(coded, &p)
if (err != nil) {
    // handle error here
}

fmt.Println("Bytes:", coded)
fmt.Println("Unmarshalled:", p)

huangapple
  • 本文由 发表于 2015年2月1日 23:27:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/28264343.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定