go-json
将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)")
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构