json.Marshal 似乎产生了一个整数数组的原因是什么?

huangapple go评论93阅读模式
英文:

Why is json.Marshal seemingly producing an array of ints?

问题

我正在尝试理解Go语言,并在这个简单的示例中遇到了第一个障碍:

package main

import (
	"encoding/json"
	"fmt"
)

type MyStructure struct {
	Integer int    `json:"integer"`
	Label   string `json:"label"`
}

func main() {
	ms := &MyStructure{9001, "over9000"}
	msjson, _ := json.Marshal(ms)
	fmt.Println(msjson)  // 期望输出: {"integer": 9001, "label": "over9000"}
}

我的输出结果是:[123 34 105 110 116 101 103 101 114 34 58 57 48 48 49 44 34 108 97 98 101 108 34 58 34 111 118 101 114 57 48 48 48 34 125]

显然,我漏掉了一些明显的东西;请问有人可以指点我正确的方向吗?

英文:

I'm trying to wrap my head around the Go language and I've hit my first stumbling block with this simple example:

package main

import (
	"encoding/json"
	"fmt"
)

type MyStructure struct {
	Integer int    `json:"integer"`
	Label   string `json:"label"`
}

func main() {
	ms := &MyStructure{9001, "over9000"}
	msjson, _ := json.Marshal(ms)
	fmt.Println(msjson)  // expect: {"integer": 9001, "label": "over9000"}
}

My output is as follows: [123 34 105 110 116 101 103 101 114 34 58 57 48 48 49 44 34 108 97 98 101 108 34 58 34 111 118 101 114 57 48 48 48 34 125]

I'm clearly missing something obvious; could someone please point me in the right direction?

答案1

得分: 12

它生成一个字节切片(参考:http://golang.org/pkg/encoding/json/#Marshal),使用string(msjson)来获取字符串。

此外,永远不要忽略错误,它会在你最不希望的时候反咬一口。

fmt.Println(string(msjson))
// 或者
fmt.Printf("%s\n", msjson) // 去掉了 @dustin 的评论
英文:

It produces a byte slice (ref : http://golang.org/pkg/encoding/json/#Marshal), use string(msjson) to get the string.

Also never ignore errors, it bites you back whenever you least expect it.

fmt.Println(string(msjson))
// or
fmt.Printf("%s\n", msjson) //shamelessly taken from @dustin's comment

huangapple
  • 本文由 发表于 2014年5月7日 20:29:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/23517868.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定