golang解析json文件的两种方法(代码片段)

沉淅尘 沉淅尘     2023-02-13     274

关键词:

目录

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

  1. 先读取文件,将文件转为 []byte 类型
  2. 通过 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每2秒调用一次函数的两种方法(代码片段)

查看详情

爬虫的两种解析方式xpath和bs4(代码片段)

1.xpath解析fromlxmlimportetree两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点(1)本地文件tree=etree.parse(文件名)  ===》保存的本地文件路径放入(2)网络文件tree=etree.HTML(网页字符串)==》直接把得到... 查看详情

webpack4打包多个css的两种方法(代码片段)

...t://输出路径和文件名,使用path模块resolve方法将输出路径解析为 查看详情

android中使用gson解析json数据的两种方法

...交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率.从结构上看,所有的数据(data)最终都可以分解成三种类型:... 查看详情

create-react-app创建项目修改配置项的两种方法(代码片段)

...riptseject",...  运行npmruneject,此时,项目中多了一个config文件,并且各个配置文件已经暴露 查看详情

java解决文件名重复问题的两种方法(代码片段)

java解决文件名重复问题的两种方法在项目开发过程中,在保存文件的时候,通常要考虑文件名重复的情况,一般来说会有两种做法1.如果文件名不存在,不修改文件名;如果存在在文件名。在文件名后面加数... 查看详情

golang[json]json解析与创建(代码片段)

查看详情

python遍历文件夹的两种方法(代码片段)

在处理数据的过程中,经常需要遍历文件夹,如果远程服务器的文件是分布式存储,遍历需要更快的速度。一种是通过os.walk()遍历,直接处理文件即可。一种是通过pathlib.Path().rglob()遍历,需要过滤出文件,... 查看详情

pythonqtgui设计:python调用ui文件的两种方法(基础篇—3)(代码片段)

Python调用UI文件有两种方法,第一种方法在上篇博文已经讲到,将UI文件转换为Python文件,进行调用。PythonQtGUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)今天来聊聊第二种方法:动态加载U... 查看详情

javamap类代码解析,map中键值对的两种取出方式(代码片段)

Map中键值对的两种取出方式1,SetkeySet:将map中所有的键存入到Set集合。因为set具备迭代器。所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。Map集合的取出原理:将map集合转成set集合。在... 查看详情

golang配置文件解析神器--viper(代码片段)

项目地址:https://github.com/spf13/viper安装方式:gogetgithub.com/spf13/viper简介viper是一个十分强大的配置文件解析工具,具有以下特点设置默认值支持的文件包括JSON,TOML,YAML,HCL,envfile和Javaproperties配置文件实时监听和重新读取配置文件从... 查看详情

python文件打包成可执行文件exe的两种方法(代码片段)

python可以做网站应用,也可以做客户端应用。但是客户端应用需要运行py脚本,如果用户不懂python就是一件比较麻烦的事情。幸好pyton有第三方模块可以将脚本可以转成exe执行。python上常见的打包方式目是通过pyinstaller来... 查看详情

从多个php数组创建json(代码片段)

...库。即使我使用json_encode方法来准备数组,结果也不是可解析的JSON。我是JSON和PHP的新手,但我尝试将三个数组编码为一个变量,以及三个不同的变量。但是在我回显结果的两种情况下,它都是无效的JSON。我在PHP文件的开头创建... 查看详情

afnetworking从指定网址下载文件的两种方式总结(代码片段)

网上有很多关于AFNetworking下载文件的方式,并不是很清晰,这是我使用过程中尝试使用的两种方式,在这里总结下。第一种方法:AFHTTPRequestOperation下载文件URL:文件下载地址;fileName:给下载文件定义的文件名&#x... 查看详情

dungeonmaster的两种方法(代码片段)

DescriptionYouaretrappedina3Ddungeonandneedtofindthequickestwayout!Thedungeoniscomposedofunitcubeswhichmayormaynotbefilledwithrock.Ittakesoneminutetomoveoneunitnorth,south,east,west,upordown.Youcannot 查看详情

文件服务器的两种实现方式(代码片段)

简介??在日常的工作项目中,我们常常会需要用到文件服务器,即在网页端就能访问到本地的电脑中某个文件夹下的所有文件,示例界面如下:??本文将介绍笔者接触到的两种实现文件服务器的方法,它们所使用的工具如下:Nginx... 查看详情

makefile的两种编译方法——原地编译和单独输出文件夹编译(代码片段)

...代码时默认是原地编译,原地编译就是编译生成的.o文件和相应的.c文件是在同一目录的。原地编译比较简单,但是会污染源码,目录里会多出生成的.o文件,并且编译不同配置的目标文件,都要先清除之前的.o... 查看详情

javascript过滤对象数组的两种方法(代码片段)

查看详情