无法在golang中从地图到结构正确地解组数据

时间:2015-11-26 12:53:53

标签: go marshalling

我目前无法正确地将数据从地图拆分为结构。以下是代码段(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????????
}

3 个答案:

答案 0 :(得分:0)

json.Marshaljson.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