英文:
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)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论