news 2026/6/23 10:44: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/6/23 19:26:47

防火墙实验 防火墙综合实验

实验八 防火墙综合实验 实验目的: 1.掌握USG6000v复杂场景部署方法,包括接口配置、安全域划分、路由设置等核心操作; 2.通过防火墙复杂场景下的配置,涵盖 NAT 转换、服务器映射、IPSec VPN 搭建、安全策略管控等功能,实现多场景网…

作者头像 李华
网站建设 2026/6/23 13:10:46

AI大模型Agent运维监控面试秘籍:15道高频题+实战解析,助你轻松应对面试挑战(收藏级)!

简介 本文精选15道AI大模型Agent运维与监控高频面试题,涵盖监控指标设计、告警机制、错误追踪、日志分析、健康检查、自动恢复、备份策略、容量规划、资源管理及运维自动化等核心知识点。每题提供详细解答和最佳实践,系统构建Agent运维知识体系&#xff…

作者头像 李华
网站建设 2026/6/23 13:10:44

FLUX.1-dev-Controlnet-Union模型对比解析

FLUX.1-dev-Controlnet-Union 模型深度解析与横向对比 在当前生成式 AI 的演进中,文生图模型早已不再满足于“根据文字画出大概画面”的初级阶段。越来越多的创作者和开发者需要的是精确控制图像结构、布局与空间关系的能力——比如让角色摆出特定姿势、建筑呈现准确…

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

DeepSpar USB Stabilizer: 仅使用软件尝试数据恢复,其背后的风险

非专业人员使用软件进行数据恢复的普遍风险全球大多数普通 IT 服务商都向客户提供数据恢复服务。在多数情况下,这些恢复尝试仅由未经正式数据恢复培训的个人使用软件工具进行。每年,这类不专业的操作导致了无数硬盘故障和数据永久丢失的案例。本文将阐述…

作者头像 李华
网站建设 2026/6/23 19:33:25

为什么计算机生必打 CTF?低门槛 + 高收益全揭秘

在网络安全行业,“CTF 经历” 早已不是加分项,而是大学生进入大厂安全岗、保研网安专业的 “硬通货”。据《2024 年网络安全人才发展报告》显示,头部企业(字节、腾讯、奇安信等)安全岗招聘中,有 CTF 获奖经…

作者头像 李华
网站建设 2026/6/23 7:00:49

TensorRT-LLM入门指南:高效推理大模型

TensorRT-LLM入门指南:高效推理大模型 在大语言模型(LLMs)正以前所未有的速度重塑AI应用的今天,一个现实问题摆在所有开发者面前:如何让千亿参数的庞然大物在生产环境中跑得又快又稳? 我们见过太多这样的…

作者头像 李华