Golang 语言中 JSON 返回空对象{}

Go语言json-repair库:高效修复LLM输出的非标准JSON 在构建基于大语言模型(LLM)的应用时,JSON作为数据交换的标准格式,其语法合规性至关重要。然而,LLM的文本生成具有概率性,常输出单引号、结构不完整或含多余标记的非标准JSON,导致下游解析失败。json-repair库采用容错优先的设计哲学,通过一次扫描的状态机算法,智能修复引号混乱、补全括号、标准化布尔值与null字面量,并过滤Markdown标记。该技术显著提升了AI工作流(如Function Calling、多智能体通信、RAG系统)的数据管道鲁棒性,确保从破损的类JSON字符串中恢复出可解析的 阅读详情

返回默认值

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Uid       int           `json:"uid"`
	UserName  string        `json:"username"`
	LoginInfo UserLoginInfo `json:"logininfo"`
}

type UserLoginInfo struct {
	Time int64 `json:"time"`
}

func main() {
	p := User{Uid: 10, UserName: "weibin"}
	data, _ := json.Marshal(&p)
	fmt.Println(string(data))
}

响应结果:给结构体赋值默认值

{
    "uid":10,
    "username":"weibin",
    "logininfo":{
        "time":0
    }
}

修改指针类型,返回NUll

type User struct {
	Uid       int            `json:"uid"`
	UserName  string         `json:"username"`
	//修改为指针类型
	LoginInfo *UserLoginInfo `json:"logininfo"`  
}

响应结果为Null

{
    "uid":10,
    "username":"weibin",
    "logininfo":null
}

增加 tag:omitempty 不返回该字段

type User struct {
	Uid       int            `json:"uid"`
	UserName  string         `json:"username"`
	//修改为指针类型
	LoginInfo *UserLoginInfo `json:"logininfo,omitempty"`  
}

响应结果:

{
    "uid":10,
    "username":"weibin",
}

调整为 interface{} 返回空对象 {}

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Uid       int         `json:"uid"`
	UserName  string      `json:"username"`
	LoginInfo interface{} `json:"logininfo"`
}

type UserLoginInfo struct {
	Time int64 `json:"time"`
}

func main() {
	p := User{Uid: 10, UserName: "weibin", LoginInfo: struct{}{}}
	data, _ := json.Marshal(&p)
	fmt.Println(string(data))
}

把类型调整为 interface{},并且赋值默认值 struct{}{},会出现预期结果:

{
    "uid":10,
    "username":"weibin",
    "logininfo":{}
}
Go语言中JSON解析的细节与陷阱 本文探讨了Go语言中JSON解析的常见问题。通过HTTP服务器示例,分析了空请求体和空对象{}两种情况的差异:空请求体返回EOF错误,而空对象则不会报错但保留结构体默认值。文章指出,只有JSON包含对应属性时才会修改结构体字段,并建议通过显式设置默认值来增强代码健壮性。这些细节有助于开发者更好地处理JSON解析场景,避免潜在错误。 阅读详情

相关推荐

go-env:围绕 os.Getenv() 进行包装,返回错误而不是空字符串

去环境 getenv() 周围的小包装器在丢失时返回错误而不是空字符串。 用法 函数获取 func Get ( name string ) ( string , error ) 获取 env var name ,如果缺少则返回错误。 函数获取默认值 func GetDefault ( name string , value string ) string 如果环境变量name不存在,则 GetDefault 返回value 。 函数必须获取 func MustGet ( name string ) string 如果缺少环境变量,MustGet 会发生恐慌。 执照 麻省理工学院

【Go】json omitempty 实现可选属性

这里的 “duration”:0.0 并不是我们需要的。2、float32 修改为 指针类型 *float32。要去掉这个,可以借助 omitempty 属性。1、duration 添加了 omitempty。反序列化后,得到的 json 结构是。有以下 json 字符串。对应 go 的结构体。

wecode666 800

HI3403烧录全流程:从ToolPlatform安装到eMMC配置避坑指南

本文详细介绍了海思HI3403芯片的完整烧录流程,涵盖从ToolPlatform工具安装、驱动配置到eMMC分区策略的实战指南。文章深入解析了BurnTool工具的使用方法、关键配置项,并提供了烧录过程中的常见问题排查与解决方案,旨在帮助开发者高效、稳定地完成HI3403嵌入式系统的部署。

weixin_29279101的博客 332

Golang 返回空 JSON 对象

Golang 返回空 JSON 对象

cmy_top的博客 2208

【华为Hilink SDK Linux系统开发】目录 开源一小步

目录 【华为Hilink开发】第一章:华为hilink平台简介及开发流程 【华为Hilink开发】第二章:华为hilink SDK网络适配、网关添加删除 【华为Hilink开发】第三章:华为hilink SDK子设备添加、删除 【华为Hilink开发】第四章:华为hilink SDK子设备控制及同步 【华为Hilink开发】第五章:华为hilink SDK适配遇到的问题 ...

开源一小步 3619

淘宝扫码登录避坑指南:如何避免异地登录风控并稳定获取Cookie(附Python代码)

本文深入解析了淘宝扫码登录的风控机制,提供了从环境仿真到代码实现的完整避坑指南。通过精细化伪装请求头、管理会话与IP策略,并附上Python示例代码,帮助开发者稳定获取Cookie,有效避免异地登录风控,实现自动化流程的可靠集成。

l6m7n8的博客 589

java中json数据中的“null”替换为空对象

在 Java 中,使用 JSONObject 类可以操作 JSON 数据。可以使用 put(key, value) 方法来替换 JSON 中的 "null" 值。如果想要替换为空对象,可以使用 put(key, JSONObject.NULL) 方法。 例如: JSONObject obj = new JSONObject(); obj.put("key", "null"); obj.put("k...

weixin_35750747的博客 2060

【TC3xx芯片】TC3xx芯片电源管理系统PMS详解

本文主要介绍了TC3xx芯片的电源管理系统(PMS),重点探讨了供电模式选择、电源监控机制及电源管理模式。文章首先分析了4种供电模式及其硬件配置方式,详细说明了3.3V单电源供电模式的特点;其次阐述了Primary和Secondary两种电源监控机制,包括阈值配置和异常中断处理;最后重点讲解了CPU和系统的电源管理模式,特别对Standby模式及其进入/退出条件进行了详细说明。文章以软件开发视角解析了TC3xx芯片的电源管理功能,为ECU低功耗设计提供了技术参考。

redparrot2008的博客 1526

在Go语言中使用JSON

有这么一个结构体: type Proto struct { Id int `json:""` }

杨理垚的技术专栏 8万+

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

王老师青少年编程 4785

【DeepSeek应用实践】手把手教程:用 AnythingLLM + Ollama + DeepSeek-R1 搭建本地企业知识库

在众多的技术方案中,我们选择了 AnythingLLM、Ollama 和 DeepSeek-R1 这一组合来搭建本地知识库。Ollama 作为一个轻量级的本地化大语言模型部署工具,支持多种模型,易于安装和使用,能够快速在本地运行强大的语言模型。DeepSeek-R1 是一个专为知识库问答设计的检索增强生成(RAG)模型,它结合了检索和生成的优势,能够快速从知识库中检索相关信息并生成精准答案。而 AnythingLLM 则是一个用户友好的界面工具,可以方便地连接 Ollama 和 DeepSeek-R1

寻道AI,探索AI无限可能! 2566

go 返回空对象_Go技术日报(20200904)

go语言中文网(每日资讯)_2020-09-04一、Go语言中文网Go 1.15.1 和 Go 1.14.8 发布:一个安全问题修复Go GUI 库:在本地运行 fyne 官网Go 数据存储篇(一):基于内存存储实现数据增删改查功能二、亚军进化史Go技术日报(2020-09-03)三、 码农桃花源深度阅读之《Concurrency in Go》相关阅读TalkGo《 Go 语言并发之道》...

weixin_33406440的博客 1068

2024全国村级行政边界数据

五级行政区划:村边界数据产品涵盖五级行政区划:(一级行政区)省级行政区共31个其中:(台湾、香港、澳门除外);(二级行政区)地级行政区共334个其中:7个地区、3个盟、30个自治州、294个地级市;(三级行政区)县级行政区共2851个其中:1355个县、117个自治县、49个旗、3个自治旗、363个县级市、962个市辖区、1个林区、1个特区;(四级行政区)乡级行政区共40497个其中:11626个乡、1034个民族乡、20117个镇、7566个街道、151个苏木、1个民族苏木、2个县辖区公所;

J_Giser的博客 3228

golang json 返回空值

golang 使json返回给前端空对象或空数组

dorlolo的博客 1492

RT-DETR改进前必看 - Ultralytics调参 1:1还原RT-DETR官方版本实验环境,更方便改进

的项目文件中集成了YOLOv3v5v6v8v9v10rt-detr11以及其中不同大小的模型结构,更方便我们学习和使用。的参数配置在路径下,其中中设置了模型在训练Train验证Val/Test预测Predict可视化Visualize导出Export超参数Hyperparameters、以及跟踪Tracker的相关参数。在调参过程中主要涉及训练Train和超参数Hyperparameters。下面主要介绍一下初始超参数Hyperparameters。

Limiiiing的博客 7959

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

go json 去掉空的返回值_Go 语言 panic 与 error 最佳实践

背景介绍刚刚接触 Go 的同学肯定会对 Go 里面的 panic 和 error 有些困惑,很常见的一种误解是把 panic 当成 Exception, 之间的区别也只是叫法不同。但其实他们是完全不同的两个概念,下面我们来看下具体的原因。错误处理的历史在分享 Go 语言错误处理最佳实践之前,我们先来了解一下 “错误处理” 的 历史小故事(原文)。在很早很早以前的C语言时代,函数只支持单个值返回,所...

weixin_29137489的博客 189

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Golang Gin如何返回JSON响应_Golang Gin响应教程【避坑】

c.String(...)想返回 201 Created:直接 c.JSON(201, result),Gin 不会覆盖你设的状态码不要在 c.JSON() 前调用 c.Header() 改 Content-Type —— 它内部已设好,重复设可能被覆盖或引发 warninggin.H 和自定义结构体,选哪个更稳gin.H 是 map[string]interface{} 的别名,写得快但运行时才暴露类型问题;结构体编译期检查字段、支持 Swagger 注释、序列化性能略高,但要多写几行。

kexnjdcncnxjs的博客 195

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Go语言中json.Marshal()一直返回[123 125]的解决方法

Go语言中对结构体进行json.Marshal()一只返回[123 125]即“{}”,原因是go中是否可导出是根据名字首字母是否大写来确定的,如果结构体某字段的首字母为小写则不可导出,例子如下(注意Student内字段首字母的大小写):不可导出:type Student struct { age uint64 name string } func main() { s := &...

Final Fantasy 2473

go如何编写struct并给赋值

定义一个结构 type Data struct { status int msg string } 赋值 mystruct := Data{0, "ok"} 这样就完成了赋值 在beego中作为json数据返回 type JSONStruct struct { Status int Msg string } func (c *TasksController) Get() { mystruct := JSONStruct{0, "ok"} c.Data["json"] = &am

风烟 3368

Go 语言中你可能不知道的 8 个微妙细节

Go 的设计哲学是“少即是多”,但这并不意味着它没有深度。恰恰相反,真正的 Go 专家,是在简单语法下精准掌控内存、并发与类型系统的人。更安全的 API更高效的并发逻辑更清晰的错误处理记住:Go 不会替你思考,但它会忠实执行你的每一个决定——无论对错。

weixin_44058951的博客 1627

kops 中的 Go JSON 序列化 v2(go-json-experiment/json):语法与语义分离的下一代 encoding/json 设计解析

本文以 kops 仓库中 vendored 的 `k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json` 模块为核心,系统讲解 go-json-experiment 这一实验性 `encoding/json` v2 实现的设计目标、语法/语义双层架构、Options 机制、与 v1 的行为差异对照以及安全考量。读者

gitblog_00926的博客 868

go结构体返回前端json数据时,null值转换为空,如何处理?

go结构体从数据库返回前端json数据时,null值转换为空,如何处理?

u013477601的博客 726

go-jmespath 详解:用 Go 实现 JMESPath JSON 查询语言的完整实战指南

go-jmespath 是 JMESPath(一种用于 JSON 的查询语言)的 Go 语言实现,它接收一个 JSON 文档和一条 JMESPath 表达式,通过表达式将输入文档转换为另一个 JSON 文档。本文以 CubeFS 仓库内 `vendor/github.com/jmespath/go-jmespath/` 下的 [README.md](https://link.gitcode.com

gitblog_00137的博客 259

origin 仓库中的 go-json-experiment/json:Go encoding/json v2 实验实现的架构、选项与行为变更全解析

> 本篇技术指南以 `vendor/k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json/README.md` 为核心,结合该模块在 origin 仓库中的源码实现,系统讲解 Go `encoding/json` v2 实验版的设计目标、语法/语义分离的双包架构、六大 Marshal/Unmarshal 入口、两级

gitblog_00382的博客 324
上一篇: 常用的设计模式
下一篇: Golang 函数耗时统计
Webben
博客等级 码龄10年 19粉丝 98原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值