package main
import (
"encoding/json"
"fmt"
"os"
)
type ConfigStruct
struct
{
Host string `json:
"host"
`
Port
int
`json:
"port"
`
AnalyticsFile string `json:
"analytics_file"
`
StaticFileVersion
int
`json:
"static_file_version"
`
StaticDir string `json:
"static_dir"
`
TemplatesDir string `json:
"templates_dir"
`
SerTcpSocketHost string `json:
"serTcpSocketHost"
`
SerTcpSocketPort
int
`json:
"serTcpSocketPort"
`
Fruits []string `json:
"fruits"
`
}
type Other
struct
{
SerTcpSocketHost string `json:
"serTcpSocketHost"
`
SerTcpSocketPort
int
`json:
"serTcpSocketPort"
`
Fruits []string `json:
"fruits"
`
}
func main() {
jsonStr := `{
"host"
:
"http://localhost:9090"
,
"port"
: 9090,
"analytics_file"
:
""
,
"static_file_version"
: 1,
"static_dir"
:
"E:/Project/goTest/src/"
,
"templates_dir"
:
"E:/Project/goTest/src/templates/"
,
"serTcpSocketHost"
:
":12340"
,
"serTcpSocketPort"
: 12340,
"fruits"
: [
"apple"
,
"peach"
]}`
//json str 转map
var dat map[string]interface{}
if
err := json.Unmarshal([]byte(jsonStr), &dat); err == nil {
fmt.Println(
"==============json str 转map======================="
)
fmt.Println(dat)
fmt.Println(dat[
"host"
])
}
//json str 转struct
var config ConfigStruct
if
err := json.Unmarshal([]byte(jsonStr), &config); err == nil {
fmt.Println(
"================json str 转struct=="
)
fmt.Println(config)
fmt.Println(config.Host)
}
//json str 转struct(部份字段)
var part Other
if
err := json.Unmarshal([]byte(jsonStr), &part); err == nil {
fmt.Println(
"================json str 转struct=="
)
fmt.Println(part)
fmt.Println(part.SerTcpSocketPort)
}
//struct 到json str
if
b, err := json.Marshal(config); err == nil {
fmt.Println(
"================struct 到json str=="
)
fmt.Println(string(b))
}
//map 到json str
fmt.Println(
"================map 到json str====================="
)
enc := json.NewEncoder(os.Stdout)
enc.Encode(dat)
//array 到 json str
arr := []string{
"hello"
,
"apple"
,
"python"
,
"golang"
,
"base"
,
"peach"
,
"pear"
}
lang, err := json.Marshal(arr)
if
err == nil {
fmt.Println(
"================array 到 json str=="
)
fmt.Println(string(lang))
}
//json 到 []string
var wo []string
if
err := json.Unmarshal(lang, &wo); err == nil {
fmt.Println(
"================json 到 []string=="
)
fmt.Println(wo)
}
}
|
from:http://my.oschina.net/golang/blog/210012