使用条带库在 Go 中解组数据

Unmarshal data in Go using stripe library

刚开始使用 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)。 Charge 是一种结构类型,您不能将它的值(也不是指向它的指针)转换为 []byte。这就是错误消息告诉您的内容。

UnmarshalJSON() 方法期望的字节片是 JSON 描述 Charge 的文本,或者查看 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

要打印 Charge 值的格式良好的 JSON 表示,请使用 json.Marshal():

out, err := json.Marshal(c)
if err != nil {
    panic(err) // handle error
}
fmt.Println(string(out))

或使用json.MarshalIndent():

out, err := json.MarshalIndent(c, "", "  ")
if err != nil {
    panic(err) // handle error
}
fmt.Println(string(out))

示例输出(剥离):

{
  "amount": 2000,
  "description": "testing",
  "id": "123",
}