返回顶部
首页 > 资讯 > 后端开发 > GO >Golang多个字段具有相同的json标签名称
  • 460
分享到

Golang多个字段具有相同的json标签名称

2024-04-04 23:04:12 460人浏览 泡泡鱼
摘要

欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《golang多个字段具有相同的JSON标签名称》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都

欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《golang多个字段具有相同的JSON标签名称》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习

问题内容

如何将 json 解组为包含 2 个字段(usernamename)且包含相同 json 标记名称 (name) 的结构?

package main

import (
    "encoding/json"
    "fmt"
)

type user struct {
    username string `json:"name,omitempty"`
    name     string `json:"name,omitempty"`
}

func main() {
    data := []byte(`
                {
                    "name":"kishore"
                }
            `)
    user := &user{}
    err := json.unmarshal(data, &user)
    if err != nil {
        panic(err)
    }
    fmt.printf("value of user : %+v\n", user)
}

实际输出: 用户值:&{用户名:姓名:}

预期输出: 用户值:&{用户名:kishore 名称:kishore}

如何获取用 kishore 填充的 usernamename 字段?

当我查看 json 的源代码时,我发现如果 2 个顶级字段具有相同的标记名称,它们就会丢弃。但是代码中的这个注释让我思考是否有一种方法可以同时标记 既标记又不标记

func dominantField(fields []field) (field, bool) {
    // The fields are sorted in increasing index-length order, then by presence of tag.
    // That means that the first field is the dominant one. We need only check
    // for error cases: two fields at top level, either both tagged or neither tagged.
    if len(fields) > 1 && len(fields[0].index) == len(fields[1].index) && fields[0].tag == fields[1].tag {
        return field{}, false
    }
    return fields[0], true
}

演示链接:https://play.golang.org/p/tn9iq8lfr6a


解决方案


这实际上是重复结构标记导致解组器忽略它的情况。根据官方文档 - “3)否则有多个字段,所有字段都会被忽略;不会发生错误。”

Https://golang.org/pkg/encoding/json/

您可能应该做的是“检查”并查看您的代码是否存在此类问题。

type User struct {
    UserName string `json:"name,omitempty"`
    Name     string `json:"-"`
}

func (u *User) UnmarshalJSON(data []byte) error {
    type U User
    if err := json.Unmarshal(data, (*U)(u)); err != nil {
        return err
    }
    u.Name = u.UserName
    return nil
}

https://play.golang.org/p/PRuigiBfwWv

终于介绍完啦!小伙伴们,这篇关于《Golang多个字段具有相同的json标签名称》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~编程网公众号也会发布Golang相关知识,快来关注吧!

您可能感兴趣的文档:

--结束END--

本文标题: Golang多个字段具有相同的json标签名称

本文链接: https://lsjlt.com/news/596401.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Golang多个字段具有相同的json标签名称
    欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《Golang多个字段具有相同的json标签名称》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都...
    99+
    2024-04-04
  • 当序列化字段的名称相同时,我应该使用结构标签吗?
    一分耕耘,一分收获!既然打开了这篇文章《当序列化字段的名称相同时,我应该使用结构标签吗?》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑...
    99+
    2024-04-05
  • 同时调用具有不同签名的多个函数
    学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《同时调用具有不同签名的多个函数》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧...
    99+
    2024-04-05
  • Sqlx 连接具有相同字段的表
    对于一个Golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《Sqlx 连接具有相同字段的表》,主要介绍了,希望对大家的知识积累有所帮助...
    99+
    2024-04-05
  • 如何在 Golang 中拥有具有相同成员但不同 JSON 标签的开发结构和生产结构?
    php小编苹果在Golang开发中,我们经常遇到需要在开发结构和生产结构中使用相同的成员,但却需要不同的JSON标签的情况。这种情况下,我们需要找到一种灵活的解决方案,以便在编写代码时...
    99+
    2024-02-11
    编译错误 golang开发
  • 具有不同结构标签集的 Golang Unmarshal
    php小编百草今天为大家介绍一种强大的Golang特性——具有不同结构标签集的Unmarshal。在Golang编程中,Unmarshal是一种将数据转换为结构体的过程。但是,当我们的...
    99+
    2024-02-10
  • HCL 解码:具有多个标签的块
    学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《HCL 解码:具有多个标签的块》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧...
    99+
    2024-04-04
  • 如何编写具有不同签名的同一方法的多个实现
    从现在开始,我们要努力学习啦!今天我给大家带来《如何编写具有不同签名的同一方法的多个实现》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方...
    99+
    2024-04-04
  • 使用SQL语句将相同名的多行字段内容拼接起来
    以下内容来自CHATGPT,其中PGADMIN经实验,有效 1、在MYSQL中使用: 可以使用GROUP_CONCAT函数来实现相同名称的多行字段内容拼接。具体语法如下: SELECT col...
    99+
    2023-09-08
    sql mysql
  • java怎么找出两个文本文件中有相同字段的行
    这篇文章主要介绍“java怎么找出两个文本文件中有相同字段的行”,在日常操作中,相信很多人在java怎么找出两个文本文件中有相同字段的行问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么找出两个文本文...
    99+
    2023-06-03
  • 扩展 Error 结构,但遇到类型“*MyError”同时具有名为“Error”的字段和方法
    编程网今天将给大家带来《扩展 Error 结构,但遇到类型“*MyError”同时具有名为“Error”的字段和方法》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Go...
    99+
    2024-04-05
  • chromedp 如何从多个具有动态名称的文本区域中选择特定文本区域
    问题内容 我有一个页面,其中有多个文本区域,这些文本区域由动态名称和相同的类组成。这意味着我无法通过 id、名称、类或类型来选择它们。 我所知道的是,在 5 个文本区域中,我需要第一个...
    99+
    2024-02-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作