go-json

"本文介绍了如何在Go语言中将map或struct转换为JSON字符串,以及如何将JSON字符串反解回map。示例代码展示了使用json.Marshal和json.Unmarshal进行转换,以及使用Encoder和Decoder进行解析的过程。此外,还提到了处理复杂JSON数据时使用interface{}
摘要由CSDN通过智能技术生成

将map或struct转为jsonstr:

package main

import (
	"encoding/json"
	"fmt"
)
func main() {
	mymap := make(map[string]string)
	mymap["name"] = "zhang"
	mymap["addr"] = "China"

	jsonstr, _ := json.Marshal(mymap) // Marsh返回[]byte类型
	fmt.Println(string(jsonstr))
}

结果{"addr":"China","name":"zhang"}

将jsonstr转为map或struct

package main

import (
	"encoding/json"
	"fmt"
)

json_input := `{"phone":"188","age":"30"}`
err := json.Unmarshal([]byte(json_input), &mymap )  // 第二个参数必须为指针类型
if err != nil {
	fmt.Println(err)
	os.Exit(1)
}
fmt.Println(mymap)

结果map[addr:London name:wang]

使用Encoder生成jsonstr

package main

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

func main() {
	mymap := make(map[string]string)
	mymap["name"] = "zhang"
	mymap["addr"] = "China"

	buffer := new(bytes.Buffer)
	json.NewEncoder(buffer).Encode(mymap)
	fmt.Println(buffer.String())
}

结果{"addr":"China","name":"zhang"}

使用Decoder解析jsonstr

package main

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

func main() {
	json_input := `{"name":"wang","addr":"London"}`
	buffer := new(bytes.Buffer)
	buffer.WriteString(json_input)
	json.NewDecoder(buffer).Decode(&mymap)
	fmt.Println(mymap)
}

结果map[addr:London name:wang]

注意事项

一般jsonstr为{"Name":"Eve","Age":6,"Addr":"shanghai","Parents":["Alice","Bob"]}这种样式的,解析时可以直接定义一个map[string]interface{}类型来接收,更为通用的是interface{}来接收:

jsonData := []byte(`{"Name":"Eve","Age":6,"Parents":["Alice","Bob"]}`)

var v interface{}
json.Unmarshal(jsonData, &v)
data := v.(map[string]interface{})

for k, v := range data {
    switch v := v.(type) {
    case string:
        fmt.Println(k, v, "(string)")
    case float64:
        fmt.Println(k, v, "(float64)")
    case []interface{}:
        fmt.Println(k, "(array):")
        for i, u := range v {
            fmt.Println("    ", i, u)
        }
    default:
        fmt.Println(k, v, "(unknown)")
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值