news 2026/4/3 6:30:19

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/2 17:07:33

LobeChat能否嵌入VR头显?沉浸式AI陪伴

LobeChat 能否嵌入 VR 头显?通往沉浸式 AI 陪伴的实践路径 在 Meta Quest 3 发布会现场,演示者戴上头显后轻声说:“帮我规划一场去冰岛的旅行。”几秒钟后,一个虚拟助手出现在视野中央,一边用温和的声音讲解行程建议&a…

作者头像 李华
网站建设 2026/3/28 6:35:30

基于Android的私家衣橱APP的设计与实现(源码+lw+部署文档+讲解等)

课题介绍本课题聚焦用户衣物管理混乱、穿搭搭配灵感不足、衣物闲置率高的痛点,设计实现基于 Android 的私家衣橱 APP。系统以 Java 为核心开发语言,基于 Android 原生框架搭建移动端应用,采用本地 云端混合存储架构,处理衣物信息…

作者头像 李华
网站建设 2026/4/3 2:50:23

高校宿舍管理|基于springboot + vue高校宿舍管理系统(源码+数据库+文档)

高校宿舍管理 目录 基于springboot vue高校宿舍管理系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue高校宿舍管理系统 一、前言…

作者头像 李华
网站建设 2026/4/2 9:46:41

USB设备厂商与产品ID大全(2017版)

USB设备厂商与产品ID大全(2017版) 在嵌入式开发、硬件调试或系统驱动适配过程中,识别USB设备的身份信息是一项基础但至关重要的任务。每一个连接到计算机的USB设备都拥有一个唯一的标识符组合:Vendor ID(厂商ID&#…

作者头像 李华
网站建设 2026/3/25 0:58:47

ChatTTS与GPT-SoVITS语音合成对比解析

ChatTTS 与 GPT-SoVITS:语音合成的两条技术路径 在短视频、AI主播、智能助手爆发式增长的今天,一段“像人”的声音,可能比一张精致的脸更具感染力。而真正让机器开口说话不再机械的,是近年来生成式AI在语音合成领域的突破性进展。…

作者头像 李华
网站建设 2026/4/2 23:09:10

GPT-SoVITS模型架构与核心模块解析

GPT-SoVITS模型架构与核心模块解析 在语音合成技术飞速发展的今天,个性化语音克隆正从“高资源依赖”走向“极低样本可用”。一个仅需一分钟音频即可复刻音色、自然流畅生成语音的系统,不再是实验室中的设想——GPT-SoVITS 正是这一趋势下的代表性成果。…

作者头像 李华