Golang 解析 json 文件的两种方法
Posted 沉淅尘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang 解析 json 文件的两种方法相关的知识,希望对你有一定的参考价值。
目录
Json 文件
// rabbitmq_queues.json
"queues": [
"name": "001",
"vhost": "/test",
"durable": true,
"auto_delete": false,
"arguments":
"x-dead-letter-exchange": "dlx-fanout-test-exchange",
"x-dead-letter-routing-key": "001",
"x-queue-type": "classic"
,
"name": "dlx-001",
"vhost": "/test",
"durable": true,
"auto_delete": false,
"arguments":
"x-queue-type": "classic"
]
已知或固定的 json 结构解析
推荐一个好用的 json 和 golang struct 转换的网站:https://oktools.net/json2go
Example code
- 先读取文件,将文件转为 []byte 类型
- 通过 jsoniter 包解析
package main
import (
"bytes"
"fmt"
jsoniter "github.com/json-iterator/go"
"io"
"os"
)
func main()
//jsoniter.Unmarshal()
var rq rabbitMqQueues
jsonContent, err := readFileToByte("rabbitmq_queues.json")
if err != nil
fmt.Printf("open file error: %v\\n", err.Error())
return
if err := jsoniter.Unmarshal(jsonContent, &rq); err != nil
fmt.Printf("json umarshal error: %v", err.Error())
return
fmt.Println(rq)
type rabbitMqQueues struct
Queues []Queues `json:"queues"`
type Arguments map[string]interface
type Queues struct
Name string `json:"name"`
Vhost string `json:"vhost"`
Durable bool `json:"durable"`
AutoDelete bool `json:"auto_delete"`
Arguments Arguments `json:"arguments,omitempty"`
func readFileToByte(path string) ([]byte, error)
f, err := os.Open(path)
if err != nil
return nil, err
return io.ReadAll(f)
解析未知 json
未知的 json 使用 map[string]interface 解析
golang 没有直接的 map 转 struct,需要通过反射来实现。这里不实现
package main
import (
"bytes"
"fmt"
jsoniter "github.com/json-iterator/go"
"io"
"os"
)
func main()
//jsoniter.Unmarshal()
var rq map[string]interface
jsonContent, err := readFileToByte("rabbitmq_queues.json")
if err != nil
fmt.Printf("open file error: %v\\n", err.Error())
return
if err := jsoniter.Unmarshal(jsonContent, &rq); err != nil
fmt.Printf("json umarshal error: %v", err.Error())
return
fmt.Println(rq)
func readFileToByte(path string) ([]byte, error)
f, err := os.Open(path)
if err != nil
return nil, err
return io.ReadAll(f)
以上是关于Golang 解析 json 文件的两种方法的主要内容,如果未能解决你的问题,请参考以下文章