Golang 的 Json处理

Golang 的 Json处理

Json 编码

使用 json.Marshal

//go:generate goversioninfo
package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	// 映射转 Json str
	marshal, _ := json.Marshal(map[string]string{"key": "value"}) 
	fmt.Println(string(marshal))

	// 数组转 Json str
	marshal, _ = json.Marshal([2]string{"hello", "world"}) 
	fmt.Println(string(marshal))

	// 结构体转 Json str
	marshal, _ = json.Marshal(struct {
		Name string `json:"name"`
		Age  int    `json:"age"`
	}{
		Name: "小明",
		Age:  10,
	}) 
	fmt.Println(string(marshal))
}

Json 转码

使用 json.Unmarshal

//go:generate goversioninfo
package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	// Json 转 Map
	jsonStr := `{"name":"小明","age":30,"city":"Tokyo"}`
	jsonObj := make(map[string]interface{})
	_ = json.Unmarshal([]byte(jsonStr), &jsonObj)
	fmt.Println(jsonObj)

	// Json 转 Slice
	jsonStr1 := `["hello", "world"]`
	jsonObj2 := make([]string, 0)
	_ = json.Unmarshal([]byte(jsonStr1), &jsonObj2)
	fmt.Println(jsonObj2)

	// Json 转结构体 设计参考类型
	jsonObj3 := struct {
		Name string `json:"name"`
		Age  string `json:"age"`
		City string `json:"city"`
	}{}
	_ = json.Unmarshal([]byte(jsonStr), &jsonObj3)
	fmt.Println(jsonObj3.Name, jsonObj3.Age, jsonObj3.City)
}

空接口

空接口 interface{} 可以是任何类型的值

package main

import "fmt"

func main() {
	// 空接口
	var i interface{}
	i = "a string"
	i = 2024
	i = 3.14

	// 类型断言
	// 语法:value, ok := i.(T)
	// 断言成功会返回值和true,否则返回断言类型的默认值和false
	v, ok := i.(int)
	fmt.Println(v, ok)

	// 类型匹配
	switch i.(type) {
	case int:
		fmt.Println("int")
	case string:
		fmt.Println("string")
	case float64:
		fmt.Println("float64")
	default:
		fmt.Println("unknown")
	}
}

解码任意格式Json

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	jsonStr := `{"name":"小明", "age":18, "gender":"男", "high":1.75}`

	var v interface{}
	_ = json.Unmarshal([]byte(jsonStr), &v)

	m := v.(map[string]interface{})
	for k, j := range m {
		fmt.Println(k, j)
	}
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

deadmau5v

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

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

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

打赏作者

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

抵扣说明:

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

余额充值