首页 > 其他分享 >Go 工程化 - JSON 使用技巧

Go 工程化 - JSON 使用技巧

时间:2023-02-15 11:48:20浏览次数:76  
标签:string err json JSON User Go 工程化 Password root

概述

在 Go 快速入门指南 - JSON 讲解了 JSON 的常用方法,但是除此之外,JSON 还有一些鲜为人知的使用技巧, 可以简洁地组合和忽略结构体字段,避免了重新定义结构体和内嵌结构体等较为笨拙的方式,这在 接口输出 和 第三发接口对接 业务场景中非常有帮助。 

这篇做一个补充,两篇文章涉及到的 JSON 知识点,应该足够大部分开发场景的使用了。

例子

临时忽略某个字段

比如在接口中输出用户信息时,希望过滤掉 密码 字段。

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    UserName string `json:"userName"`
    Email    string `json:"email"`
    Password string `json:"password"`
}

func main() {
    u := &User{
        UserName: "root",
        Email:    "[email protected]",
        Password: "123456",
    }

    data, err := json.Marshal(struct {
        *User
        // 使用一个内嵌的字段覆盖掉原字段
        Password string `json:"password,omitempty"`
    }{
        User: u,
    })
    if err != nil {
        panic(err)
    }

    fmt.Printf("%s\n", data)
}

// $ go run main.go
// 输出如下 
/**
  {"userName":"root","email":"[email protected]"}
*/

临时添加字段

比如在接口中输出用户信息时,希望添加一个 Token 字段。

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    UserName string `json:"userName"`
    Email    string `json:"email"`
    Password string `json:"password"`
}

func main() {
    u := &User{
        UserName: "root",
        Email:    "[email protected]",
        Password: "123456",
    }

    data, err := json.Marshal(struct {
        *User
        // 使用一个内嵌的字段覆盖掉原字段
        Password string `json:"password,omitempty"`
        // 新增一个字段
        Token    string `json:"token"`
    }{
        User:  u,
        Token: "askdhfh2oyy43423#14$$asdssxxx11",
    })
    if err != nil {
        panic(err)
    }

    fmt.Printf("%s\n", data)
}

// $ go run main.go
// 输出如下 
/**
  {"userName":"root","email":"[email protected]","token":"askdhfh2oyy43423#14$$asdssxxx11"}
*/

字符串和数字转换

接口对接时,可能会存在双方字段名称一样,但是类型不一样的的情况。比如同一个字段,A 方用 int 类型, B 方用 string 类型,下面的例子演示如何解决这个 数据类型冲突问题 。

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    UserName string `json:"userName"`
    Email    string `json:"email"`
    Password string `json:"password"`
    // 字段是 int 类型, JSON 输出 string 类型
    Age      int    `json:"age,string"`
}

func main() {
    u := &User{
        UserName: "root",
        Email:    "[email protected]",
        Password: "123456",
        Age:      100,
    }

    data, err := json.Marshal(u)
    if err != nil {
        panic(err)
    }

    fmt.Printf("%s\n", data)
}

// $ go run main.go
// 输出如下 
/**
  {"userName":"root","email":"[email protected]","password":"123456","age":"

标签:string,err,json,JSON,User,Go,工程化,Password,root
From: https://www.cnblogs.com/cheyunhua/p/17122196.html

相关文章

  • json.dumps()
    json.dumps():将python对象编码成Json字符串importjson#将字典类型数据转换成json字符串data={'name':'winnie','age':20,}json_str=json.dumps(data)pr......
  • kubernetes 使用jq命令对资源配置查看(yaml json文件解析工具)
    有图形化的直接从图形化可以看到各种资源,如Deployment、Pod等资源的配置安装1.jq命令centos环境下安装#yum-yinstalljq2.https://github.com/stedolan/jq下载 ......
  • java json对象转json字符串(带转义符)(json对象嵌套json字符串)
    1.情景展示如上图所示,这一个标准的json字符串,双引号需要使用反斜杠\进行转义,一般情况下,我们是用不到这种json字符串的,在java中,json字符串的通常表现形式是这种:......
  • Java 枚举类转json对象
     1.情景展示 如上图所示,我想要将枚举类转换成json对象,key对应属性名称,value对应属性值,效果如下:{"IvcVoucherCode":"200","IvcVoucherStatus":"票据模板下载成功"}......
  • Codeforces Round #852 (Div. 2) D - Moscow Gorillas
    https://codeforces.com/contest/1793/problem/D不妨枚举MEX(...)的值x。此时对于序列[l,r],需要满足:两个序列的1到x-1都在这个区间内,并且x都不在这个区间内......
  • Python+Django(1):建立项目
    为项目新建一个目录,将其命名为learning_log,再在终端中切换到这个目录(Python3):运行模块venv来创建一个名为ll_env的虚拟环境:python-mvenvll_env激活虚拟环境:ll_env\S......
  • Go代码基于dockerfile做成镜像
    一、基础环境安装与初始化#手动执行步骤yuminstallgo-y#将go代码拷贝进入机器#初始化go项目[root@mobantest]#pwd/root/test#下载模块[root@mobantest......
  • go template
    /*[email protected],Version2.0(the"License");youmaynotusethisfileexceptincompliancewiththeLicen......
  • Django context must be a dict rather than UserProfile.
    contextmustbeadictratherthanUserProfile. #主页@login_requireddefindex(request):data={}data=request.userprint(type(data))print(da......
  • djiango框架前端数据通过Ajax传到后端进行处理
    最近在琢磨搭建测试平台,python相对来说简单一点,框架的话就选择djiango框架,既然搭建平台就肯定需要进行数据处理,摸索了一下,在此记录一下数据的梳理流程。1.首先自己写一个......