news 2026/4/15 21:06:28

Golang中解析SQL语句为JSON格式常用的库介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Golang中解析SQL语句为JSON格式常用的库介绍

在Go中解析SQL语句为JSON格式,常用的库有以下几种:

1.sqlparser(最常用)

GitHub: https://github.com/xwb1989/sqlparser

import("github.com/xwb1989/sqlparser""encoding/json")funcparseSQLToJSON(sqlstring)(string,error){stmt,err:=sqlparser.Parse(sql)iferr!=nil{return"",err}// 转换为JSONjsonBytes,err:=json.Marshal(stmt)iferr!=nil{return"",err}returnstring(jsonBytes),nil}

2.vitess-sqlparser(功能更全面)

GitHub: https://github.com/vitessio/vitess/tree/main/go/vt/sqlparser

import("vitess.io/vitess/go/vt/sqlparser""encoding/json")funcparseMySQLToJSON(sqlstring)(string,error){stmt,err:=sqlparser.Parse(sql)iferr!=nil{return"",err}// 使用自定义结构体格式化输出result:=map[string]interface{}{"type":sqlparser.ASTString(stmt),"parsed":stmt,}jsonBytes,_:=json.MarshalIndent(result,""," ")returnstring(jsonBytes),nil}

3.pg_query_go(专门解析PostgreSQL)

GitHub: https://github.com/lfittl/pg_query_go

import("github.com/lfittl/pg_query_go""encoding/json")funcparsePostgreSQLToJSON(sqlstring)(string,error){result,err:=pg_query_go.ParseToJSON(sql)iferr!=nil{return"",err}returnresult,nil}

4.自定义实现示例

packagemainimport("encoding/json""fmt""github.com/xwb1989/sqlparser")typeSQLNodestruct{Typestring`json:"type"`Valueinterface{}`json:"value,omitempty"`Children[]*SQLNode`json:"children,omitempty"`}funcparseToCustomJSON(sqlstring)(string,error){stmt,err:=sqlparser.Parse(sql)iferr!=nil{return"",err}root:=&SQLNode{Type:fmt.Sprintf("%T",stmt)}// 递归遍历ASTswitchnode:=stmt.(type){case*sqlparser.Select:root.Value=map[string]interface{}{"columns":parseSelectColumns(node.SelectExprs),"from":parseTable(node.From),"where":parseWhere(node.Where),"limit":parseLimit(node.Limit),}case*sqlparser.Insert:// 处理INSERT语句// ... 其他语句类型}jsonBytes,_:=json.MarshalIndent(root,""," ")returnstring(jsonBytes),nil}

5.使用示例

funcmain(){sql:="SELECT id, name FROM users WHERE age > 18 LIMIT 10"// 使用sqlparserjsonOutput,err:=parseSQLToJSON(sql)iferr!=nil{panic(err)}fmt.Println("JSON输出:")fmt.Println(jsonOutput)// 输出示例结构// {// "type": "*sqlparser.Select",// "select_exprs": [...],// "from": [...],// "where": {...},// "limit": {...}// }}

选择建议:

  1. 通用SQL解析:推荐使用sqlparservitess-sqlparser

    • 支持 MySQL 语法
    • 活跃维护
    • 文档相对完善
  2. PostgreSQL专用:使用pg_query_go

    • 基于 PostgreSQL 官方解析器
    • 支持最新 PostgreSQL 语法
  3. 需要精细控制:可以基于这些库构建自己的JSON格式

这些库都能将SQL解析为AST(抽象语法树),然后你可以选择将其序列化为JSON格式。注意原始AST对象直接Marshal可能包含循环引用,需要适当处理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 3:06:24

基于Android的固定资产借用管理平台系统(源码+lw+部署文档+讲解等)

课题介绍本课题聚焦企事业单位、高校固定资产借用流程繁琐、归还提醒缺失、资产追踪困难的痛点,设计实现基于 Android 的固定资产借用管理平台。系统以 Java 为核心开发语言,基于 Android 原生框架搭建移动端应用,搭配轻量后端服务架构&#…

作者头像 李华
网站建设 2026/4/7 4:25:26

AI智能体落地实战指南:揭秘七大核心陷阱与解决方案,程序员小白必备的避坑宝典!

简介 本文揭示企业AI智能体落地的七大陷阱及解决方案:从业务场景切入而非为AI而AI、构建数据基础、采用成熟技术、确保安全可控、重塑人机协作、建立持续运维机制和规划能力中台。成功落地不仅是技术采购,更是运营模式和组织能力的重构,需以业…

作者头像 李华
网站建设 2026/4/8 8:53:40

Windows下深度学习环境配置全指南

Windows下深度学习环境配置全指南 在尝试跑通第一个中文文本分类模型时,你是否曾因为“CUDA not available”而反复重装驱动?或者在安装PaddleOCR时被复杂的依赖关系搞得焦头烂额?对于大多数刚进入深度学习领域的开发者来说,真正…

作者头像 李华
网站建设 2026/4/15 15:27:48

Mac上一键部署Dify的完整指南

Mac上一键部署Dify的完整指南 在大模型技术飞速发展的今天,越来越多开发者希望快速将AI能力落地为实际应用。但面对复杂的后端架构、模型集成和知识库管理,从零搭建一套稳定可用的系统往往耗时耗力。有没有一种方式,能让我们像搭积木一样&am…

作者头像 李华
网站建设 2026/4/15 1:19:06

拒绝无效勤奋:01Agent如何用“全网热点+多端适配”重构内容生产力?

“在内容爆炸的时代,每天有上亿篇文章被AI生成,但真正打动人心的内容却越来越稀缺。”对于当下的内容创作者而言,最大的痛点并非“写不出字”,而是陷入了两个巨大的黑洞:一是在海量信息噪音中寻找高价值选题的决策瘫痪…

作者头像 李华
网站建设 2026/4/14 2:58:00

汽车EDI: Knorr-Bremse EDI 需求分析

Knorr-Bremse AG 是一家总部位于德国慕尼黑的全球领先工业企业,成立于 1905 年,主要专注于为 铁路车辆和商用车辆(如卡车、公交车等)制造制动系统及安全关键电子/机械系统。公司致力于提升道路和轨道交通的安全性、效率和可持续性…

作者头像 李华