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大師代發,拒絕轉載,轉載需要作者授權


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM