Golang Json文件解析为结构体工具-json2go
概述
json2go是一个基于Golang开发的轻量json文件解析、转换命令行工具,目前支持转换输出到屏幕、输出到文件两种方式。
功能
- json文件读取、解析
- golang结构体输出
支持输出方式
- 输出到屏幕终端
- 输出到.go文件
安装
$ go get -u github.com/usthooz/json2go
$ go build
$ go install
实现思路
在第三方对接时,经常需要将响应的json文件转换为结构体,网上也有类似的工具进行直接转换,但是作为开发者,相信是更喜欢在命令行工作的,所以开发了这款json转换工具。
流程结构
如下图所示为项目实现流程及结构:

代码目录结构

主要代码
- 常量及变量定义
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
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
Golang Json文件解析为结构体工具-json2go的更多相关文章
- golang中如何将json文件解析成结构体
package tool import ( "bufio" "encoding/json" "fmt" "os" ) t ...
- Json文件解析(下)
Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::dequ ...
- Json文件解析(上)
Json文件解析(上) 代码地址:https://github.com/nlohmann/json 自述文件 alt=GitHub赞助商 data-canonical-src="https: ...
- PHP JSON文件解析并获取key、value,判断key是否存在
/****************************************************************************** * PHP JSON文件解析并获取key ...
- 【微信】微信小程序 微信开发工具中新创建的json文件,编译报错VM1781:2 pages/module/module.json 文件解析错误 SyntaxError: Unexpected end of JSON input
如果新创建报错:编译报错VM1781:2 pages/module/module.json 文件解析错误 SyntaxError: Unexpected end of JSON input 解决方法 ...
- NPOI+Json文件解析Excel
记点笔记,加深印象!最近有个导入Excel工能需要完成,Excel列名是中文的,导入Excel我用的NPOI插件,如果不对Excel做解析,列名有可能会给我带来一些字符方面的麻烦,于是想到了一个比较l ...
- Twaver的mono-desiner导出的json文件解析
以画的交换机为例,其他大概都差不多. 利用Twaver做出交换机模型如图1所示,其中,每一个端口都是一个单独的对象.具体Twaver操作流程参见网址:http://twaver.servasoft.c ...
- json 文件解析与应用
第一步:首先弄一个 json 文件 我这里成为 config.json 内容如下 { ": { , "desc":"中华人民共和国" }, &qu ...
- json文件解析
场景 读取json文件,读取子域名扫描结果 实现 >>> import json >>> with open("C:\\Users\\Windows32\ ...
随机推荐
- java实时监听日志写入kafka(转)
原文链接:http://www.sjsjw.com/kf_cloud/article/020376ABA013802.asp 目的 实时监听某目录下的日志文件,如有新文件切换到新文件,并同步写入kaf ...
- git: error while loading shared libraries: libiconv.so.2
git安装之后出现:git: error while loading shared libraries: libiconv.so.2: cannot open shared object file: ...
- secureCRT在Windows上面的安装过程
参考这篇文章: https://www.cnblogs.com/yjd_hycf_space/p/7729796.html
- [leetcode]Merge Intervals @ Python
原题地址:https://oj.leetcode.com/problems/merge-intervals/ 题意: Given a collection of intervals, merge al ...
- Mysql 高可用方案
1 mysql分布式数据库,如 mycat https://www.cnblogs.com/zzsdream/articles/6650690.html 2 读写分离,mysql主从复制+mysql ...
- 从头认识java-18.2 主要的线程机制(4)-优先级
这一章节我们来讨论一下多线程的优先级问题. 1.样例: package com.ray.ch17; public class Test { public static void main(String ...
- 求一个正实数X的开方
问题:求一个正实数X的平方根,不能使用sqrt等库函数. 解析:本题要求求一个正实数的平方根,不能使用sqrt等已有的库函数,我们可以做一下考虑: 利用二分法,mid=X/2.0,若mid*mid&g ...
- 2014年10月底/终于/HTML5定稿……/技术从来不会成为发展的绝对瓶颈/反而商业成了无法逾越的鸿沟【转载+整理】
原文地址 本文内容 一.HTML5 诞生 二.HTML5 第一阶段: Web 增强与打破垄断 三.HTML5 第二阶段: 移动互联网 四.HTML5 这回真的来了 五.颠覆原生 App 六.还有什么会 ...
- Android 自定义 ListView 显示网络上 JSON 格式歌曲列表
本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
- android中RecyclerView控件实现瀑布流布局
本文是在之前文章的基础上做的修改:android中RecyclerView控件的使用 1.修改列表项news_item.xml: <?xml version="1.0" en ...