怎么保留json的空

1、json 去除空值

定义结构体的时候加上tag omitempty 标识

package main

import (
	"encoding/json"
	"fmt"
)

type person struct {
	Name string `json:"name,omitempty"`
	Age int64 `json:"age,omitempty"`
	Sex int64 `json:"sex,omitempty"`
}

func main(){
	var (
		per person
		b []byte
		err error
	)

	per = person{
		Name: "",
		Age:  15,
		Sex:  1,
	}

	b , err = json.Marshal(per)

	fmt.Println(err)
	fmt.Println(string(b))
}

结果

<nil>
{"age":15,"sex":1}

结果中祛去除了name,因为它为空

2、就想用空显示

这个时候我不想去除空,可能前端传过来的就是""值
在现有的一些Golang库中,go-github中有体现

核心就是转为指针类型

package main

import (
	"encoding/json"
	"fmt"
	"testing"
)

func Test_JSON_Empty(t *testing.T) {
	jsonData := `{"age":12,"name":"xyz","sex":0}`
	req := Person{}
	_ = json.Unmarshal([]byte(jsonData), &req)
	fmt.Printf("%+v\n", req)
	fmt.Printf("%s\n", *req.Name)
	fmt.Printf("%d\n", *req.Sex)
}
func Test_JSON_Nil(t *testing.T) {
	jsonData := `{"id":"1234","name":"xyz","age":0}`
	req := Person{}
	_ = json.Unmarshal([]byte(jsonData), &req)
	fmt.Printf("%+v\n", req)
	fmt.Printf("%d\n", *req.Age)
}

结果

go test -v
=== RUN   Test_JSON_Empty
{Name:0xc00008e580 Age:0xc0000a6178 Sex:0xc0000a6188}
xyz
0
--- PASS: Test_JSON_Empty (0.00s)
=== RUN   Test_JSON_Nil
{Name:0xc00008e600 Age:0xc0000a61d0 Sex:<nil>}
0
--- PASS: Test_JSON_Nil (0.00s)
PASS
ok      test/josn-empty 0.005s

可以看到没有的sex 为nil 而为0的age 实际是0,不为nil

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a...Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值