Louis Thibault
Louis Thibault

Reputation: 21430

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

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?

Upvotes: 5

Views: 3825

Answers (1)

OneOfOne
OneOfOne

Reputation: 99334

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

Upvotes: 12

Related Questions