Golang Json文件解析为结构体工具-json2go

代码地址如下:
http://www.demodashi.com/demo/14946.html

概述

json2go是一个基于Golang开发的轻量json文件解析、转换命令行工具,目前支持转换输出到屏幕、输出到文件两种方式。

功能

  • json文件读取、解析
  • golang结构体输出

支持输出方式

  • 输出到屏幕终端
  • 输出到.go文件

安装

$ go get -u github.com/usthooz/json2go
$ go build
$ go install

实现思路

在第三方对接时,经常需要将响应的json文件转换为结构体,网上也有类似的工具进行直接转换,但是作为开发者,相信是更喜欢在命令行工作的,所以开发了这款json转换工具。

流程结构

如下图所示为项目实现流程及结构:
design

代码目录结构

目录结构

主要代码

  • 常量及变量定义
const (
	// 主命令
	exec = "json2go"
	// version 当前版本
	version = "v1.0"
)

var (
	// command 命令
	command string
	// workPath current work path
	workPath string
	// jsonFile json文件名称
	jsonFile string
	// outputFile 输出文件名称
	outFile string
	// outType 输出类型
	outType string
)

var (
	// commandsMap 命令集
	commandMap map[string]*Command
)

// Command
type Command struct {
	Name   string
	Detail string
	Func   func(name, detail string)
}
  • 命令初始化
// initCommands
func initCommands() {
	for i, v := range os.Args {
		switch i {
		case 1:
			command = v
		}
	}

	// 初始化命令列表
	commandMap = map[string]*Command{
		"v": &Command{
			Name:   "v",
			Detail: "查看当前版本号",
			Func:   getVersion,
		},
		"help": &Command{
			Name:   "help",
			Detail: "查看帮助信息",
			Func:   getHelp,
		},
		"gen_types": &Command{
			Name:   "gen_types",
			Detail: "根据json文件自动生成struct",
			Func:   genStruct,
		},
	}
}
  • main方法

在使用时,main作为主要调用方,完成命令衔接。

func main() {
	// 获取当前目录
	getWorkDir()
	// 初始化命令
	initCommands()
	if len(os.Args) < 2 {
		getHelp("help", commandMap["help"].Detail)
		return
	}
	flag.CommandLine.Parse(os.Args[2:])
	if !checkArgs() {
		return
	}
	c := commandMap[command]
	if c == nil {
		getHelp("help", commandMap["help"].Detail)
		return
	} else {
		c.Func(c.Name, c.Detail)
	}
}

使用

  • 屏幕输入json2go或者json2go help查看帮助信息,如下图所示。

帮助信息

运行

  • 默认输出到屏幕终端,如下图所示

样例

常用命令及方法

  • 新建json文件
  • 使用命令将json文件转换为Golang结构体,可选择输出到文件以及屏幕
  • 使用默认配置
json2go gen_types
  • 输出到文件
json2go gen_types -out_type=file -out_file=out_types.go
  • 输出到屏幕
json2go gen_types -out_type=print

Golang Json文件解析为结构体工具-json2go

代码地址如下:
http://www.demodashi.com/demo/14946.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

posted on   demo例子集  阅读(3672)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
历史上的今天:
2018-03-06 SearchView的全面解析
2018-03-06 网页聊天软件
2018-03-06 android实现免费短信验证
2018-03-06 使用 JavaScript开发的跨平台音乐、书籍播放器
2018-03-06 Bmob实现android云端存储
2018-03-06 基于JWT的Token开发案例
2018-03-06 Vue-cli + Express 构建的SPA Blog(前后分离)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示