How do I parse JSON in golang?

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

How do I parse JSON in golang?

问题

我尝试在golang中解析JSON,但似乎没有起作用。我得到的输出是0,而不是1。我做错了什么?

package main

import (
  "fmt"
  "encoding/json"
)

type MyTypeA struct {
  a int
}

func main() {
  var smthng MyTypeA
  jsonByteArray := []byte(`{"a": 1}`)
  json.Unmarshal(jsonByteArray, &smthng)
  fmt.Println(smthng.a)
}

你的代码有一个问题。在Go中,结构体字段必须以大写字母开头才能被导出和解析。因此,你需要将MyTypeA结构体中的a字段改为大写字母开头的A

修改后的代码如下:

package main

import (
  "fmt"
  "encoding/json"
)

type MyTypeA struct {
  A int
}

func main() {
  var smthng MyTypeA
  jsonByteArray := []byte(`{"a": 1}`)
  json.Unmarshal(jsonByteArray, &smthng)
  fmt.Println(smthng.A)
}

这样修改后,你应该能够正确解析JSON并打印出1。

英文:

I tried to "Unmarshal" json in golang, but it doesn't seem to be working.
I get 0 printed out instead of 1. What am I doing wrong?

package main

import (
  "fmt"
  "encoding/json"
)

type MyTypeA struct {
  a int
}

func main() {
  var smthng MyTypeA
  jsonByteArray := []byte(`{"a": 1}`)
  json.Unmarshal(jsonByteArray, &smthng)
  fmt.Println(smthng.a)
}

答案1

得分: 4

你的代码有两个问题。

  1. 你需要导出字段,否则Marshal函数无法正常工作,可以在这里阅读相关信息:http://golang.org/ref/spec#Exported_identifiers
  2. 你的包必须命名为main,否则func main函数将不会被执行。

以下是翻译好的代码:

package main

import (
	"encoding/json"
	"fmt"
)

type MyTypeA struct {
	A int
}

func main() {
	var smthng MyTypeA
	jsonByteArray := []byte(`{"a": 1}`)
	json.Unmarshal(jsonByteArray, &smthng)
	fmt.Println(smthng.A)
}

希望对你有帮助!

英文:

Two problems with your code.

  1. You need to export fields or Marshal won't work, read about it here.
  2. Your package must be called main or func main won't be executed.

http://play.golang.org/p/lJixko1QML

type MyTypeA struct {
	A int
}

func main() {
	var smthng MyTypeA
	jsonByteArray := []byte(`{"a": 1}`)
	json.Unmarshal(jsonByteArray, &smthng)
	fmt.Println(smthng.A)
}

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

发表评论

匿名网友

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

确定