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)")
}
}
浙公网安备 33010602011771号