JSON 解析 Go 中 int64 类型的空值处理

json 解析 go 中 int64 类型的空值处理

本文将介绍如何使用指针类型 *int64 在 Go 语言中处理 JSON 解析过程中遇到的 int64 类型空值问题。通过使用指针,我们可以区分字段未赋值和值为 0 的情况,从而更准确地反映 JSON 数据中的 null 值。我们将提供详细的代码示例,展示如何定义结构体、解析 JSON 数据以及处理空值情况。

使用 *int64 处理 JSON 中的 Null 值

当 JSON 数据中 int64 类型的字段可能为空 (null) 时,直接使用 int64 类型会导致解析错误,因为 null 无法直接赋值给 int64。解决此问题的方法是使用 *int64,即 int64 类型的指针。指针可以为 nil,用于表示 JSON 中的 null 值。

示例代码:

package mainimport (    "encoding/json"    "fmt")var d = []byte(`{ "world":[{"data": 2251799813685312}, {"data": null}]}`)type jsonobj struct {    World []World `json:"world"` // 使用 json tag}type World struct {    Data *int64 `json:"data"` // 使用 *int64}func main() {    var data jsonobj    jerr := json.Unmarshal(d, &data)    fmt.Println(jerr)    for _, w := range data.World {        if w.Data == nil {            fmt.Println("Data is null")        } else {            fmt.Println("Data:", *w.Data) // 使用 * 解引用指针        }    }}

代码解释:

*`int64类型:**World结构体中的Data字段类型声明为*int64`,表示指向 int64 类型的指针。JSON Tag: 在结构体字段上添加 json:”data” tag,确保 JSON 解析器能够正确地将 JSON 中的 “data” 字段映射到结构体的 Data 字段。json.Unmarshal: 使用 json.Unmarshal 函数将 JSON 数据解析到 data 变量中。如果 JSON 中的 “data” 字段为 null,则 w.Data 的值为 nil。空值判断: 使用 w.Data == nil 判断 Data 字段是否为空。解引用指针: 如果 Data 字段不为空,则使用 *w.Data 解引用指针,获取 int64 类型的值。

运行结果:

Data: 2251799813685312Data is null

注意事项:

在使用 *int64 时,需要注意空指针的判断,避免出现空指针异常。如果需要将 null 转换为特定的 int64 值(例如 -1 或 MinValue),可以在解析后进行手动处理。

总结:

通过使用 *int64 类型,我们可以有效地处理 JSON 数据中 int64 类型的空值,避免解析错误。这种方法允许我们区分字段未赋值和值为 0 的情况,从而更准确地反映 JSON 数据的实际含义。在实际应用中,请根据具体需求选择合适的处理方式,并注意空指针的判断,确保程序的稳定性和可靠性。

以上就是JSON 解析 Go 中 int64 类型的空值处理的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1403717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Golangmap创建、操作及遍历方法
上一篇 2025年12月15日 19:49:44
优化函数式语言虚拟机:策略与实践
下一篇 2025年12月15日 19:49:59

相关推荐

  • 如何创建一个基础的Swoole HTTP服务器?

    要创建一个基础的swoole http服务器,步骤如下:1. 使用swoole的httpserver类创建服务器实例;2. 设置服务器启动时的回调函数;3. 设置请求处理的回调函数;4. 启动服务器。这个过程通过示例代码展示了如何在9501端口监听请求并返回响应,swoole的异步特性和协程功能可以…

    2026年9月20日
    100
  • “满血版”东风日产N7到来!NISSAN OS 1.3.0正式推送

    “满血版”东风日产N7到来!NISSAN OS 1.3.0正式推送“满血版”东风日产N7到来!NISSAN OS 1.3.0正式推送“满血版”东风日产N7到来!NISSAN OS 1.3.0正式推送“满血版”东风日产N7到来!NISSAN OS 1.3.0正式推送

      近日,东风日产n7迎来上市之后第二次大版本系统升级,版本号为nissan os 1.3.0。此次升级新增城市记忆领航辅助驾驶与记忆泊车辅助两大核心功能,并对20余项座舱功能进行优化,标志着n7正式进阶为“满血版”。此次升级旨在为用户提供合资品牌中最领先的智能辅助驾驶体验,以及更便捷、更愉悦的座舱…

    2026年9月20日 用户投稿
    000
  • 如何设置VSCode的默认编码?

    VSCode默认使用UTF-8编码,可通过设置files.encoding指定默认编码如utf8、gbk;2. 启用files.autoGuessEncoding可自动识别文件编码;3. 在settings.json中配置可持久化编码设置,支持手动修改并即时生效。 VSCode 默认使用 UTF-8…

    2026年9月20日
    000
  • 荣耀Magic8系列发布会六大产品价格汇总来了:349元起 最贵6699元!

    10月15日,荣耀召开新品发布会,正式推出荣耀Magic8系列、荣耀MagicPad 3 Pro等六大新品,涵盖手机、平板、耳机、智能手表及智能配件。 各产品价格信息汇总如下: 荣耀Magic8系列 荣耀Magic8 12GB+256GB:4499元 12GB+512GB:4799元 16GB+51…

    2026年9月20日
    000
  • 如何在Java中定义一个包含参数的方法

    定义Java带参方法需明确访问修饰符、返回类型、方法名及参数列表。例如:public static int add(int a, int b) { return a + b; },调用时传入对应类型参数,如add(5, 3)输出结果8,参数类型必须匹配,否则编译错误。 在Java中定义一个包含参数的…

    2026年9月20日
    100
  • 灵绘AI如何生成3D效果_灵绘AI3D效果生成的实用教程

    启用灵绘AI的3D视图增强模式,输入含景深等关键词的提示词,调整视角与深度参数并启用Z轴分层,生成后使用光影滤镜增强立体感,最后导出为WebP 3D或OBJ格式以保留深度信息。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 如果您希望使用灵…

    2026年9月20日
    000
  • mysql如何优化like模糊查询

    优先使用前缀匹配并建立索引,避免前置通配符导致全表扫描;对大字段采用全文索引或外部搜索引擎如Elasticsearch;合理设计覆盖索引,减少SELECT *,提升查询效率。 在MySQL中,LIKE模糊查询虽然常用,但容易导致性能问题,特别是在数据量大的情况下。优化的关键在于减少全表扫描、提升索引…

    2026年9月20日
    000
  • 为什么VSCode的CSS代码提示不全?

    答案:VSCode CSS提示不全通常由配置或环境问题导致。1. 确保文件语言模式为CSS并正确关联扩展名;2. 更新VSCode以支持现代CSS特性,自定义属性需插件辅助;3. 安装IntelliSense、Tailwind或PostCSS等插件增强提示功能;4. 检查settings.json中…

    2026年9月20日
    000
  • 如何在Linux中自动重启 Linux systemd自动恢复

    答案:通过配置systemd服务文件中的Restart、RestartSec、WatchdogSec及StartLimitInterval等参数,可实现Linux服务的自动重启与看门狗监控,并避免无限重启循环,提升系统稳定性。 在Linux中,可以通过systemd来实现服务的自动重启,确保服务在崩…

    2026年9月20日
    000
  • windows10如何关闭输入法的相关广告和推荐_windows10输入法广告关闭方法

    1、关闭微软输入法个性化推荐:在设置中禁用广告ID和自学习功能;2、清除搜狗输入法广告:通过注册表删除通知权限并关闭推荐选项;3、禁用后台任务与启动项:在任务计划程序和启动管理中阻止输入法相关广告行为,彻底提升输入体验。 如果您在使用Windows 10的输入法时频繁遇到广告或推荐内容干扰输入体验,…

    2026年9月20日
    000
  • 电脑开机要按F1因BIOS设置错误通过恢复默认设置解决

    开机需按F1主因是BIOS检测到配置错误或硬件信息丢失,常见于CMOS电池没电、硬盘模式设置错误等;恢复默认设置可解决多数问题。 电脑开机提示按F1才能进入系统,多数情况是BIOS设置异常导致的。最常见的原因是CMOS电池没电、硬盘模式设置错误、软驱或启动设备配置问题等。这类问题通常可以通过恢复BI…

    2026年9月20日
    100
  • 428万行业最强跑分!荣耀高管:Magic8同是骁龙 大有不同

    10月16日消息,昨晚荣耀magic8系列正式亮相,全系搭载第五代骁龙8至尊版处理器,这款芯片目前处于行业性能巅峰地位。 该处理器采用台积电第三代3nm工艺打造,在相同性能下功耗降低10%。其CPU架构为2+6的八核设计,其中超大核主频高达4.6GHz,创下移动平台新纪录,大核频率则为3.62GHz…

    2026年9月20日
    100
  • Mockito中利用自定义ArgumentMatcher实现集合内参数匹配

    mockito并未提供直接的`in()`参数匹配器来判断方法参数是否包含在指定集合中。本文将详细介绍如何利用`intthat`(或`argthat`)结合lambda表达式或自定义匹配器,灵活实现对方法参数是否属于某个集合的条件匹配,从而在测试存根(stubbing)或验证(verification…

    2026年9月20日
    000
  • safari浏览器怎么设置默认搜索引擎为谷歌_safari浏览器默认搜索引擎设置方法

    首先在iPhone的“设置”中进入“Safari浏览器”,选择“搜索引擎”并设为Google;Mac用户可在Safari地址栏点击放大镜图标后选择Google。 如果您在使用Safari浏览器时发现默认搜索引擎并非您习惯使用的谷歌,可能会导致搜索结果不符合预期或访问受限。以下是将Safari浏览器默…

    2026年9月20日
    000
  • Java中将包含嵌套列表的对象列表扁平化为单一元素列表的转换技巧

    本文探讨了在java中如何将一个包含嵌套列表的对象列表进行转换,使其生成一个新的列表,其中每个对象内部的嵌套列表只包含一个元素。文章详细介绍了三种实现方式:基于java 7及以前版本的传统循环方法、利用java 8至java 15的stream api结合`flatmap`操作,以及java 16及…

    2026年9月20日
    200
  • PHP框架依赖管理工具选哪个_PHP框架依赖管理工具对比

    Composer是PHP依赖管理的首选工具,通过composer.json定义依赖、自动安装包并处理版本冲突,支持主流框架、拥有丰富生态和自动加载机制,尽管存在学习曲线和潜在依赖冲突,但其优势远超其他方案。 PHP框架依赖管理,其实就是选一个靠谱的工具来帮你自动搞定项目里各种代码包的安装、更新和卸载…

    2026年9月20日
    000
  • 如何为VSCode配置C++开发环境?

    答案:配置VSCode的C++环境需安装MinGW-w64编译器并添加到PATH,安装C/C++和可选Code Runner扩展,创建.c_cpp_properties.json、tasks.json和launch.json文件以配置编译器路径、编译任务和调试设置,最后通过编译运行测试代码验证配置成…

    2026年9月20日
    100
  • MySQL索引是什么_如何通过索引提升查询性能?

    MySQL索引是什么_如何通过索引提升查询性能?MySQL索引是什么_如何通过索引提升查询性能?MySQL索引是什么_如何通过索引提升查询性能?MySQL索引是什么_如何通过索引提升查询性能?

    索引通过排序+查找结构提升查询速度,适合加索引的字段包括where条件、join连接、order by和group by中的字段,但唯一值少、数据量小或频繁更新的字段不适合。常见误区有索引失效、模糊查询左侧通配符、联合索引顺序错误、冗余索引等。可通过explain命令查看索引使用情况,定期清理无用索…

    2026年9月20日 用户投稿
    000
  • Mockito ArgumentMatcher:优雅实现参数集合包含性验证

    本文探讨了在mockito中,当需要验证方法参数是否包含在特定集合中时,如何克服标准`argumentmatchers`的限制。通过利用`argumentmatchers.intthat()`(或`argthat()`)结合lambda表达式,可以灵活地实现自定义的参数匹配逻辑。文章还介绍了如何将此…

    2026年9月20日
    000
  • 绝境北方兑换码有什么 绝境北方最新2025兑换码分享

    绝境北方最新通用兑换码有:north888、viking2025、ship666等等,可在游戏内商城直接兑换,获得黄金龙头船首像、1000铁与建造速度+15%等丰厚奖励,限时有效先到先得,也可在修改器中享受更多福利。 享受无限物品|游戏作弊器: 绝境北方最新2025兑换码如下: NORTH888:兑…

    2026年9月20日
    500

发表回复

登录后才能评论
关注微信