首页 > 其他分享 >golang json inline用法

golang json inline用法

时间:2024-08-16 18:27:17浏览次数:13  
标签:Project struct golang 嵌套 json inline string

package main

import (
"encoding/json"
"fmt"
)

type Project struct {
Key string `json:"key"`
Value string `json:"value"`
}

type JiraHttpReqField struct {
Project `json:",inline"`
Summary string `json:"summary"`
Description string `json:"description"`
}

func main() {
dataProject := Project{
Key: "key",
Value: "value",
}
dataJiraHttpReqField := &JiraHttpReqField{
Project: dataProject,
Summary: "Summary",
Description: "Description",
}
data, _ := json.Marshal(dataJiraHttpReqField)
fmt.Println(string(data))

}
JiraHttpReqField 跟Project结构体是平级关系,如果很多struct需要Project里面的字段,可以直接inline Project,减少重复定义

 

建议点击 查看原文 查看最新内容。

原文链接: https://typonotes.com/posts/2024/01/09/golang-tag-inline/

这是一片错误笔记, 没什么高大上的东西。简单记录一下在 Go 中使用 json 和 yaml 在解析字符串的时候没有太注意的一个点。

以 Json 为例, 通常我们在 struct结构Json结构 的时候是 一一对应 的。

以下几种名字都是我自己取的, 不保证正确。

1. 平板型

平铺直叙, 没有任何波澜, 最简单的类型。

2. 嵌套型:

  1. 嵌套对象也支持引用/指针类型
  2. 嵌套对象可以是:struct, slice, map 等。
    • 从某种角度来说, 平板型 可以被认为是一种 特殊嵌套型, 被嵌套对象是 基础类型
  3. 嵌套对象是 具名嵌套

以上说的这两种情况是最常用的。

3. 内联型 (,inline)

在 tag 种使用 ,inline 关键值。可以实现这种 内敛型

从图中可以看到

  1. 左边:使用了平板型的 Json 结构
  2. 右边:使用了嵌套型的 struct 结构, 但又有一点差别。

需要 特别强调 的是:

  1. 需要使用 tag inline 关键字, 但需要省略 字段映射名字。所以 inline 前面有一个 ,
    • json:",inline"
  2. 字段 必须匿名嵌套 的。

NOTE: 如果使用具名嵌套则,即使使用了 inline 也无效。也是这种习惯造成我错误记忆的。

3.1 应用场景

我能想到最直观的,就是 k8s yaml 声明文件中的 api信息

代码语言:javascript 复制
type Deployment struct {
 metav1.TypeMeta `json:",inline"`
 metav1.ObjectMeta `json:"metadata,omitempty"`
 Spec DeploymentSpec `json:"spec,omitempty"`
 Status DeploymentStatus `json:"status,omitempty"`
}

// +k8s:deepcopy-gen=false
type TypeMeta struct {
 Kind string `json:"kind,omitempty"`
 APIVersion string `json:"apiVersion,omitempty"`
}

对应的 yaml 文件

代码语言:javascript 复制
# k8s deployment.yaml
# inline 内联
apiVersion: apps/v1
kind: Deployment

metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  # ...

3.2 测试案例

代码语言:javascript 复制
package main

import (
 "encoding/json"
 "fmt"
)

type info_inline struct {
 User    user `json:"user"`
 address `json:",inline"`
}
type user struct {
 Name string `json:"name"`
 Age  int    `json:"age"`
}

type address struct {
 Home   string `json:"home"`
 School string `json:"school"`
}

func main() {
 s := `{
  "user": {
   "name": "jarvis",
   "age": 18
  },
  "home": "home",
  "school": "school"
 }`

 var i info_inline
 err := json.Unmarshal([]byte(s), &i)
 if err != nil {
  panic(err)
 }
 fmt.Printf("%+v\n", i)
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。 原始发表:2024-01-09,如有侵权请联系 [email protected] 删除   yaml 笔记 对象 json inline


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/fjgui/article/details/104063806

标签:Project,struct,golang,嵌套,json,inline,string
From: https://www.cnblogs.com/cheyunhua/p/18363434

相关文章

  • 【python学习】为什么你应该放弃标准 JSON 库,转向更智能的 CommentJSON?
    在软件开发中,JSON是不可或缺的数据交换格式。然而,标准的json库并不支持注释,这使得开发者在处理复杂配置文件时感到束手束脚。本文将详细介绍commentjson库,它不仅能解析标准JSON格式,还支持带注释的JSON文件。通过对比commentjson和标准json库的用法及优势,帮助你......
  • JsonPath断言
    JsonPath断言1、Maven引入依赖<!--JsonPath依赖项--><dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>2.7.0</version>......
  • docker配置文件daemon.json
    docker配置文件daemon.json1.配置文件的作用  1)可以配置下载的镜像源,即镜像加速器:常见的有配置阿里云镜像源,因为docker的官方镜像源下载镜像很慢  2)可以配置连接到不安全的私有仓库2.配置文件存放的路径  /etc/docker3.配置下载的镜像源地址和允许连接到不安全的私......
  • 区块链编程-golang(三)
    文件目录主文件下有文件blockchain、go.mod、gosum、文件tmp、main.go文件blockhain下面有block.go、blockchain.go、proof.go part1:block.gopackageblockchainimport("bytes""encoding/gob""log")typeBlockstruct{Hash[]b......
  • 掌握Golang的html/template:打造动态网页的秘籍
    掌握Golang的html/template:打造动态网页的秘籍在Web开发的世界中,动态内容的生成是至关重要的。Golang以其简洁高效的特性,成为了后端开发的热门选择。而html/template包,则是Golang中用于创建HTML模板的官方工具,它不仅安全,而且功能强大。本文将带领你深入了解如何使用html/te......
  • 分割模型的数据集由json转为txt
    点击查看代码#-*-coding:utf-8-*-importjsonimportosimportargparsefromtqdmimporttqdmimportglobimportcv2importnumpyasnpdefconvert_label_json(json_dir,save_dir,classes):json_paths=os.listdir(json_dir)classes=classes.spli......
  • JSONUtil、JsonArray应用 (全网最全面的解析方式汇总) - 调用第三方接口后,获取的结果
    背景:近期开发的内容涉及到了我们平台对其他平台提供接口的调用,然后也涉及到接口提供方的验签等操作;还有我们的加签操作等。今天记录一下调用三方接口后返回的接口如何解析;怎么拿到自己想要的东西。其实调用三方接口分为几步1、采用哪种方式调用三方接口,这种依赖于第三方......
  • docker 配置daemon.json镜像源地址
    docker镜像拉取失败网络异常?errorpullingimageconfiguration:downloadfailedafterattempts=6:dialtcp108.160.172.208:443:connect:connectionrefused原因:docker镜像源访问失败,或网络严重延迟,或没有设置镜像源文件daemon.jsondocker配置国内镜像源前言1、docke......
  • 自定义JSON名
    lSer:=TMVCJsonDataObjectsSerializer.Create;trylSer.DataSetToJsonArray(MasterDBHelper.Query,lJObj.a['m'],TMVCNameCase.ncLowerCase,[],procedure(constaField:TField;constaJsonObject:TJSONObject......
  • 在nginx的访问日志中输出响应时间(json格式)
    log_formatjsonescape=json'{''"time":"$time_iso8601",''"host":"$remote_addr",''"method......