刚开始使用Go进行黑客攻击。
我正在尝试使用Stripe库。我尝试使用他们的自定义Charge
调用来创建UnmarshalJSON
类型,但我传递的任何参数似乎都无效。这里发生了什么?
var charge, err = sc.Charges.Get(id, nil)
if err != nil {
log.Fatal(err)
}
thing := charge.UnmarshalJSON([]byte(charge))
这是函数:https://github.com/stripe/stripe-go/blob/master/charge.go#L162
我收到:
./hello.go:48: cannot convert charge (type *stripe.Charge) to type []byte
尚未找到要满足此功能的传递参数。任何帮助表示感谢。
最佳答案
JSON转换为Charge
Charge.UnmarshalJSON()
需要一个 byte slice ([]byte
)。 Charge
是一种结构类型,您不能将其值(也不能指向它的指针)转换为[]byte
。这就是错误消息告诉您的内容。UnmarshalJSON()
方法期望的 byte slice 是描述Charge
的JSON文本,或者研究UnmarshalJSON()
的实现,它还接受单个JSON文本作为Charge
ID。
所以这应该工作:
var charge, err = sc.Charges.Get(id, nil)
if err != nil {
log.Fatal(err)
}
err := charge.UnmarshalJSON([]byte(`"123"`))
或以JSON表示的
Charge
结构(不完整):var charge, err = sc.Charges.Get(id, nil)
if err != nil {
log.Fatal(err)
}
s := `{"id":"123","amount":2000,"description":"testing"}`
err := charge.UnmarshalJSON([]byte(s))
fmt.Printf("%+v", thing)
输出应包含从JSON文本正确设置的以下字段,以及其他值为零的字段:
{Amount:2000 Desc:testing ID:123}
Charge
转换为JSON要打印格式正确的JSONt_code值的JSON表示形式,请使用
Charge
:out, err := json.Marshal(c)
if err != nil {
panic(err) // handle error
}
fmt.Println(string(out))
或使用
json.Marshal()
:out, err := json.MarshalIndent(c, "", " ")
if err != nil {
panic(err) // handle error
}
fmt.Println(string(out))
示例输出(剥离):
{
"amount": 2000,
"description": "testing",
"id": "123",
}