Hot For Coding
Golang如何读取JSON文件

Golang

读取文件

首先要能读取文件内容,读取文件内容可以使用os.Open()打开一个文件,然后再使用ioutil.ReadAll()读取文件的内容。这里要注意一下,ioutil.ReadAll()读取到的是字节,也就是[]bytes数据类型。如果你需要把字节转换成字符可以在使用string()函数转成字符。如这个例子,读取user.json文件并打印出内容

user.json

{
  "first_name": "Nicholas",
  "last_name": "Lee",
  "blog_url": "https://www.qttc.net",
  "blog_name": "Quest Tech"
}

main.go

package main

import (
  "fmt"
  "io/ioutil"
  "os"
)

func main() {
  // 打开json文件
  jsonFile, err := os.Open("user.json")

  // 最好要处理以下错误
  if err != nil {
    fmt.Println(err)
  }

  // 要记得关闭
  defer jsonFile.Close()

  byteValue, _ := ioutil.ReadAll(jsonFile)
  fmt.Println(string(byteValue))
}

运行结果

$ go run main.go
{
  "first_name": "Nicholas",
  "last_name": "Lee",
  "blog_url": "https://www.qttc.net",
  "blog_name": "Quest Tech"
}

解析json内容

以上我们成功读取到了JSON文件的内容,现在我们就要解析它,我通常比较喜欢使用struct类型做转换,所以我们先定义一个struct

type User struct {
  FirstName string `json:"first_name"`
  LastName  string `json:"last_name"`
  BlogURL   string `json:"blog_url"`
  BlogName  string `json:"blog_name"`
}

然后我们在使用json.Unmarshal()方法把json内容转为struct,如这个例子

main.go

package main

import (
  "encoding/json"
  "fmt"
  "io/ioutil"
  "os"
)

type User struct {
  FirstName string `json:"first_name"`
  LastName  string `json:"last_name"`
  BlogURL   string `json:"blog_url"`
  BlogName  string `json:"blog_name"`
}

func main() {
  // 打开json文件
  jsonFile, err := os.Open("user.json")

  // 最好要处理以下错误
  if err != nil {
    fmt.Println(err)
  }

  // 要记得关闭
  defer jsonFile.Close()

  byteValue, _ := ioutil.ReadAll(jsonFile)

  var user User
  json.Unmarshal([]byte(byteValue), &user)

  fmt.Println(user)
}

运行结果

$ go run main.go
{Nicholas Lee https://www.qttc.net Quest Tech}

当然,如果你很懒不想定义struct,也可以直接使用map[string]interface{},如

main.go

package main

import (
  "encoding/json"
  "fmt"
  "io/ioutil"
  "os"
)

func main() {
  // 打开json文件
  jsonFile, err := os.Open("user.json")

  // 最好要处理以下错误
  if err != nil {
    fmt.Println(err)
  }

  // 要记得关闭
  defer jsonFile.Close()

  byteValue, _ := ioutil.ReadAll(jsonFile)

  var result map[string]interface{}
  json.Unmarshal([]byte(byteValue), &result)

  fmt.Println(result)
}

运行结果

$ go run main.go
map[blog_name:Quest Tech blog_url:https://www.qttc.net first_name:Nicholas last_name:Lee]

不太推荐使用map[string]interface{}的方式,这样在开发的时候总是很不舒服,不知道map里都有哪些属性。

TITLE: Golang如何读取JSON文件

LINK: https://www.qttc.net/507_golang_read_a_json_file_and_parse.html

NOTE: 转载内容请注明出处