golang快速创建JSON对象的实用工具插件库gjo的使用

golang快速创建JSON对象的实用工具插件库gjo的使用

简介

gjo是一个小型实用工具,用于快速创建JSON对象。它受到了jpmens/jo项目的启发。

screenshot

支持的操作系统

  • Mac
  • Linux
  • Windows

系统要求

  • Go 1.1.14及以上版本
  • Git

安装方法

从源码构建

$ git clone https://github.com/skanehira/gjo.git
$ cd gjo
$ GO111MODULE=on go install

下载二进制文件

可以从发布页面下载预编译的二进制文件

使用方法

Mac和Linux

# 创建嵌套JSON对象
$ gjo -p status=$(gjo name=gorilla age=26 lang=$(gjo -a Go Java PHP))
{
    "status": {
        "age": 26,
        "lang": [
            "Go",
            "Java",
            "PHP"
        ],
        "name": "gorilla"
    }
}

# 查看帮助
$ gjo -h
Usage of gjo:
  -a    creates an array of words  # 创建单词数组
  -p    pretty-prints             # 美化输出格式
  -v    show version              # 显示版本信息

Windows

在Windows上如果想使用$()语法,需要先安装shellwrap工具。

shellwrap gjo -p status=$(gjo name=gorilla age=26)

示例代码

创建简单JSON对象

# 创建简单键值对
$ gjo name=John age=30
{"name":"John","age":30}

# 美化输出
$ gjo -p name=John age=30
{
    "name": "John",
    "age": 30
}

创建数组

# 创建字符串数组
$ gjo -a apple banana orange
["apple","banana","orange"]

# 在对象中包含数组
$ gjo -p fruits=$(gjo -a apple banana orange) count=3
{
    "fruits": [
        "apple",
        "banana",
        "orange"
    ],
    "count": 3
}

创建嵌套对象

# 创建嵌套JSON结构
$ gjo -p user=$(gjo name=Alice age=25) active=true
{
    "user": {
        "name": "Alice",
        "age": 25
    },
    "active": true
}

作者

gorilla0513


更多关于golang快速创建JSON对象的实用工具插件库gjo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang快速创建JSON对象的实用工具插件库gjo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


gjo - 快速创建JSON对象的Golang实用工具库

gjo是一个轻量级的Golang库,专门用于快速构建JSON对象,特别适合在测试、原型开发或需要快速生成JSON数据的场景中使用。

安装

go get github.com/skanehira/gjo

基本用法

创建简单JSON对象

package main

import (
	"fmt"
	"github.com/skanehira/gjo"
)

func main() {
	// 创建简单JSON对象
	obj := gjo.Object(
		gjo.KV{"name", "John"},
		gjo.KV{"age", 30},
		gjo.KV{"isMarried", false},
	)

	fmt.Println(obj)
	// 输出: {"name":"John","age":30,"isMarried":false}
}

创建嵌套JSON对象

func nestedExample() {
	obj := gjo.Object(
		gjo.KV{"user", gjo.Object(
			gjo.KV{"name", "Alice"},
			gjo.KV{"profile", gjo.Object(
				gjo.KV{"email", "alice@example.com"},
				gjo.KV{"active", true},
			)},
		)},
		gjo.KV{"timestamp", "2023-05-15T12:00:00Z"},
	)

	fmt.Println(obj)
	// 输出: {"user":{"name":"Alice","profile":{"email":"alice@example.com","active":true}},"timestamp":"2023-05-15T12:00:00Z"}
}

创建JSON数组

func arrayExample() {
	arr := gjo.Array(
		gjo.Object(gjo.KV{"id", 1}, gjo.KV{"name", "Item 1"}),
		gjo.Object(gjo.KV{"id", 2}, gjo.KV{"name", "Item 2"}),
		gjo.Object(gjo.KV{"id", 3}, gjo.KV{"name", "Item 3"}),
	)

	fmt.Println(arr)
	// 输出: [{"id":1,"name":"Item 1"},{"id":2,"name":"Item 2"},{"id":3,"name":"Item 3"}]
}

混合使用对象和数组

func mixedExample() {
	data := gjo.Object(
		gjo.KV{"users", gjo.Array(
			gjo.Object(
				gjo.KV{"id", 101},
				gjo.KV{"roles", gjo.Array("admin", "editor")},
			),
			gjo.Object(
				gjo.KV{"id", 102},
				gjo.KV{"roles", gjo.Array("viewer")},
			),
		)},
		gjo.KV{"system", gjo.Object(
			gjo.KV{"version", "1.0.0"},
			gjo.KV{"settings", gjo.Object(
				gjo.KV{"debug", true},
				gjo.KV{"timeout", 30},
			)},
		)},
	)

	fmt.Println(data)
	/* 输出:
	{
		"users": [
			{"id":101,"roles":["admin","editor"]},
			{"id":102,"roles":["viewer"]}
		],
		"system": {
			"version":"1.0.0",
			"settings": {
				"debug":true,
				"timeout":30
			}
		}
	}
	*/
}

高级用法

从结构体生成JSON

虽然gjo主要设计用于快速构建JSON,但也可以与标准库结合使用:

type User struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Email string `json:"email"`
}

func fromStructExample() {
	user := User{
		Name:  "Bob",
		Age:   25,
		Email: "bob@example.com",
	}

	// 将结构体嵌入到更大的JSON对象中
	obj := gjo.Object(
		gjo.KV{"status", "success"},
		gjo.KV{"data", user},
		gjo.KV{"meta", gjo.Object(
			gjo.KV{"count", 1},
			gjo.KV{"timestamp", "2023-05-15T12:30:00Z"},
		)},
	)

	fmt.Println(obj)
}

格式化输出

func prettyPrintExample() {
	obj := gjo.Object(
		gjo.KV{"name", "Pretty Print"},
		gjo.KV{"details", gjo.Object(
			gjo.KV{"enabled", true},
			gjo.KV{"level", "verbose"},
		)},
	)

	// 使用标准库进行美化输出
	prettyJSON, _ := json.MarshalIndent(obj, "", "  ")
	fmt.Println(string(prettyJSON))
	/* 输出:
	{
	  "name": "Pretty Print",
	  "details": {
	    "enabled": true,
	    "level": "verbose"
	  }
	}
	*/
}

实际应用场景

  1. API测试:快速构建测试用的请求体
  2. Mock数据:为前端开发提供模拟数据
  3. 原型开发:快速验证JSON结构
  4. CLI工具:快速生成JSON输出

总结

gjo提供了一种简洁直观的方式来构建JSON对象,相比直接使用map[string]interface{}或结构体marshal,它在需要快速构建复杂嵌套JSON时特别有用。虽然功能简单,但在适当的场景下能显著提高开发效率。

对于更复杂的JSON处理需求,建议结合标准库的encoding/json或其他更全面的JSON处理库使用。

回到顶部