我目前无法正确地将数据从地图拆分为结构。以下是代码段(Brief Code at playground):
请求您提供在取消数据回复时获取默认值的原因。
package main
import (
"fmt"
"encoding/json"
"os"
)
func main() {
fmt.Println("Hello, playground")
type PDPOffer struct {
cart_value int `json:"cart_value"`
discount_amount_default int `json:"discount_amount_default"`
max_discount string `json:"max_discount"`
}
a:= map[string]interface{} {
"cart_value" : 1,
"max_discount" : 2,
}
var pdf PDPOffer
b, err := json.Marshal(a)
if err != nil {
fmt.Println("error:", err)
}
os.Stdout.Write(b)//working
err1 := json.Unmarshal(b, &pdf)
if err1 != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", pdf)//displaying just the defualt values????????
}
答案 0 :(得分:0)
json.Marshal
和json.Unmarshal
只能用于导出的struct字段。您的字段不会导出,并且对json代码不可见。
答案 1 :(得分:0)
你的unmarshal不工作的原因是你需要公开struct的字段,为此你需要用大写字母开始字段名。有些东西在下面:
type PDPOffer struct {
Cart_value int `json:"cart_value"`
Discount_amount_default int `json:"discount_amount_default"`
Max_discount string `json:"max_discount"`
}
答案 2 :(得分:0)
另外,你试图将一个int值编组为“max_discount”的字符串,你需要将它作为一个字符串存储在你正在编组的地图中:
a := map[string]interface{}{
"cart_value": 1,
"max_discount": "2",
}
错误处理错误检查err1 != nil
然后打印err
隐藏了邮件error: json: cannot unmarshal number into Go value of type string
包含所有修正的工作示例:http://play.golang.org/p/L8VC-531nS