基于Go语言开发一个JSON格式校验工具

 更新时间:2025年09月08日 08:30:13   作者:程序员爱钓鱼  
在日常开发中,经常会遇到需要校验 JSON 格式是否正确的场景,如果 JSON 格式不正确,系统往往会报错甚至崩溃,因此开发一个 命令行 JSON 格式校验工具 非常实用,所以本文给大家介绍了如何基于Go语言开发一个JSON格式校验工具,需要的朋友可以参考下

在日常开发中,经常会遇到需要校验 JSON 格式是否正确的场景:

  • • 前端调试接口返回数据时
  • • 配置文件是否符合 JSON 格式
  • • 接口 Mock 数据校验

如果 JSON 格式不正确,系统往往会报错甚至崩溃。因此开发一个 命令行 JSON 格式校验工具 非常实用。

一、程序目标

我们要实现一个命令行工具 jsoncheck,支持以下功能:

  1. 校验输入的字符串是否是合法 JSON
  2. 校验指定文件是否是合法 JSON
  3. (可选)格式化 JSON 输出

使用方式:

# 校验字符串
jsoncheck -str='{"name":"Go","version":1}'

# 校验文件
jsoncheck -file=config.json

# 校验并格式化
jsoncheck -file=config.json -pretty

二、实现思路

  1. 使用 flag 包解析命令行参数
  2. 如果输入是字符串,直接用 json.Unmarshal 校验
  3. 如果输入是文件,先读取文件内容再校验
  4. 如果传入 -pretty,就格式化输出 JSON

三、代码实现

main.go

package main

import (
    "encoding/json"
    "flag"
    "fmt"
    "os"
)

func main() {
    // 定义命令行参数
    strInput := flag.String("str", "", "需要校验的 JSON 字符串")
    fileInput := flag.String("file", "", "需要校验的 JSON 文件路径")
    pretty := flag.Bool("pretty", false, "是否格式化输出 JSON")

    flag.Parse()

    var data []byte
    var err error

    // 优先处理字符串输入
    if *strInput != "" {
        data = []byte(*strInput)
    } else if *fileInput != "" {
        data, err = os.ReadFile(*fileInput)
        if err != nil {
            fmt.Println("❌ 读取文件失败:", err)
            return
        }
    } else {
        fmt.Println("用法: jsoncheck -str='{"key":"value"}' 或 -file=path.json [-pretty]")
        return
    }

    // 校验 JSON 格式
    var js interface{}
    if err := json.Unmarshal(data, &js); err != nil {
        fmt.Println("❌ JSON 格式错误:", err)
        return
    }

    fmt.Println("✅ JSON 格式正确")

    // 如果需要格式化输出
    if *pretty {
        formatted, _ := json.MarshalIndent(js, "", "  ")
        fmt.Println("格式化后的 JSON:")
        fmt.Println(string(formatted))
    }
}

四、运行效果

1. 校验字符串

go run main.go -str='{"name":"Go","version":1}'

输出:

✅ JSON 格式正确

2. 校验错误 JSON

go run main.go -str='{"name":"Go",}'

输出:

❌ JSON 格式错误: invalid character '}' looking for beginning of object key string

3. 校验文件并格式化

go run main.go -file=config.json -pretty

输出:

✅ JSON 格式正确
格式化后的 JSON:
{
  "name": "Go",
  "version": 1
}

五、总结

这个 JSON 格式校验工具小巧但实用,涵盖了:

  • 命令行参数解析(flag 包)
  • JSON 校验(json.Unmarshal)
  • 文件读取(os.ReadFile)
  • 格式化输出(json.MarshalIndent)

在实际项目中,你可以将它打包成二进制程序放到 PATH 下,随时用来校验 JSON 文件。

到此这篇关于基于Go语言开发一个JSON格式校验工具的文章就介绍到这了,更多相关Go JSON格式校验工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言并发技术详解

    Go语言并发技术详解

    这篇文章主要介绍了Go语言并发技术详解,本文讲解了goroutine、channels、Buffered Channels、Range和Close等内容,需要的朋友可以参考下
    2014-10-10
  • Go语言题解LeetCode888公平糖果交换示例详解

    Go语言题解LeetCode888公平糖果交换示例详解

    这篇文章主要为大家介绍了Go语言题解LeetCode888公平糖果交换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • go语言 bool类型的使用操作

    go语言 bool类型的使用操作

    这篇文章主要介绍了go语言 bool类型的使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • go语言中HTTPRouter的算法演进

    go语言中HTTPRouter的算法演进

    这篇文章主要从开发中常见的应用场景 “路由管理” 为例,为大家详细介绍一下三种常用的实现方案背后的数据结构和算法,感兴趣的小伙伴可以了解一下
    2023-08-08
  • Go语言通过TCP协议实现聊天室功能

    Go语言通过TCP协议实现聊天室功能

    这篇文章主要为大家详细介绍了Go语言中如何通过TCP协议实现聊天室功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • Go语言中slice作为参数传递时遇到的一些“坑”

    Go语言中slice作为参数传递时遇到的一些“坑”

    这篇文章主要给大家介绍了关于Go语言中slice作为参数传递时遇到的一些“坑”,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • 详解Go语言中的iface和eface

    详解Go语言中的iface和eface

    Go 是 Google 开发的一种编译型、并发型,并具有垃圾回收功能的编程语言,这篇文章主要介绍了Go语言中的iface和eface,需要的朋友可以参考下
    2023-07-07
  • 使用Golang Validator包实现数据验证详解

    使用Golang Validator包实现数据验证详解

    在开发过程中,数据验证是一个非常重要的环节,而golang中的Validator包是一个非常常用和强大的数据验证工具,提供了简单易用的API和丰富的验证规则,下面我们就来看看Validator包的具体使用吧
    2023-12-12
  • Go语言单链表实现方法

    Go语言单链表实现方法

    这篇文章主要介绍了Go语言单链表实现方法,实例分析了基于Go语言的单链表实现原理与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • go并发编程sync.Cond使用场景及实现原理

    go并发编程sync.Cond使用场景及实现原理

    这篇文章主要为大家介绍了go并发编程sync.Cond使用场景及实现原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论