Json 編碼 1:
package main
import (
"fmt"
"encoding/json"
)
func main() {
m := User{"乃木坂春香", "abcde@yahoo.com", "0932-111-222", "Japan"}
b, _ := json.Marshal(m)
fmt.Println(string(b))
}
type User struct {
Name string
EMail string
Phone string
Address string
}
輸出結果:{"Name":"乃木坂春香","EMail":"abcde@yahoo.com","Phone":"0932-111-222","Address":"Japan"}
Json 編碼 2:
package main
import (
"encoding/json"
"fmt"
)
type UserData struct {
Name string
EMail string
}
type UserDataArray struct {
User []UserData
}
func main() {
var s UserDataArray
s.User = append(s.User, UserData{Name: "夏娜碳", EMail: "shanatan@gmail.com"})
s.User = append(s.User, UserData{Name: "多拉A夢", EMail: "dolaamo@yahoo.com"})
b, err := json.Marshal(s)
if err != nil {
fmt.Println("json err:", err)
}
fmt.Println(string(b))
}
輸出結果 (其實輸出只有一行,這裡為了美觀我進行手工排版):
{
"User":
[
{
"Name":"夏娜碳",
"EMail":"shanatan@gmail.com"
},
{
"Name":"多拉A夢",
"EMail":"dolaamo@yahoo.com"
}
]
}
Json 編碼 3:
package main
import (
"fmt"
"encoding/json"
)
func main() {
m := map[string]interface{}{
"Name": "小鳩",
"Age": 12,
"Doll": []interface{}{
"Cat",
"Bear",
"Rabbit",
},
}
b, _ := json.Marshal(m)
fmt.Println(string(b))
}
輸出結果:{"Age":12,"Doll":["Cat","Bear","Rabbit"],"Name":"小鳩"}
Json 解碼 1:
package main
import (
"fmt"
"encoding/json"
)
type user struct {
Name string
Age int
Married bool
}
func main() {
src_json := []byte(`{"Name":"柏崎星奈","Age":16,"Married":false}`)
u := user{}
err := json.Unmarshal(src_json, &u)
if err != nil {
panic(err)
}
fmt.Println("Name: ", u.Name)
fmt.Println("Age: ", u.Age)
fmt.Println("Married: ", u.Married)
}
輸出結果:
Name: 柏崎星奈
Age: 16
Married: false
Json 解碼 2:
package main
import (
"encoding/json"
"fmt"
)
func main() {
src_json := []byte(`{"Name":"柏崎星奈","Age":16,"Married":false}`)
// interface 可以接收任何類型的值
u := map[string]interface{}{}
err := json.Unmarshal(src_json, &u)
if err != nil {
panic(err)
}
fmt.Println("Name: ", u["Name"])
fmt.Println("Age: ", u["Age"])
// interface 也可以直接轉成你要的型別
fmt.Printf("Married: %v", u["Married"].(bool))
}
輸出結果:
Name: 柏崎星奈
Age: 16
Married: false
Json 解碼 3 (終極版):
package main
import (
"encoding/json"
"fmt"
)
const myJson = `{
"Name":"刀劍神域",
"Type":"小說",
"Author":"川原礫",
"IllustrationAuthor":"abec",
"Publishing":"ASCII Media Works",
"ProductCounts":{
"NovelCounts":12,
"CartoonCounts":2,
"AnimationCount":25
},
"Staff":[
{
"Name":"多拉A夢",
"Phone":"0944-444-444",
"EMail":"DoLaLa@gmail.com",
"Address":"Japan"
},
{
"Name":"天線寶寶(丁丁)",
"Phone":"0954-788-438",
"Email":"a54385478@yahoo.com.tw",
"Address":"Earth"
}
]
}`
type ProductCountsInfo struct {
NovelCounts int
CartoonCounts int
AnimationCount int
}
type StaffInfo struct {
Name string
Phone string
Email string
Address string
}
type ThemeInfo struct {
Name string
Type string
Author string
IllustrationAuthor string
Publishing string
ProductCounts ProductCountsInfo
Staff []StaffInfo
}
func main() {
var t ThemeInfo
json.Unmarshal([]byte(myJson), &t)
fmt.Println("重構後:", t, "\n")
fmt.Println("名稱:", t.Name)
fmt.Println("類型:", t.Type)
fmt.Println("作者:", t.Author)
fmt.Println("插畫家:", t.IllustrationAuthor)
fmt.Println("出版社:", t.Publishing)
fmt.Println("\n產品數量:")
fmt.Println(" 小說數量:", t.ProductCounts.NovelCounts)
fmt.Println(" 漫畫數量:", t.ProductCounts.CartoonCounts)
fmt.Println(" 動畫數量", t.ProductCounts.AnimationCount)
fmt.Println("\n工作人員:")
fmt.Println(" 0:")
fmt.Println(" 姓名:", t.Staff[0].Name)
fmt.Println(" 手機:", t.Staff[0].Phone)
fmt.Println(" 電子信箱:", t.Staff[0].Email)
fmt.Println(" 住址:", t.Staff[0].Address)
fmt.Println(" 1:")
fmt.Println(" 姓名:", t.Staff[1].Name)
fmt.Println(" 手機:", t.Staff[1].Phone)
fmt.Println(" 電子信箱:", t.Staff[1].Email)
fmt.Println(" 住址:", t.Staff[1].Address)
}
輸出結果:
重構後: {刀劍神域 小說 川原礫 abec ASCII Media Works {12 2 25} [{多拉A夢 0944-444-444 DoLaLa@gmail.com Japan} {天線寶寶(丁丁) 0954-788-438 a54385478@yahoo.com.tw Earth}]}
名稱: 刀劍神域
類型: 小說
作者: 川原礫
插畫家: abec
出版社: ASCII Media Works
產品數量:
小說數量: 12
漫畫數量: 2
動畫數量 25
工作人員:
0:
姓名: 多拉A夢
手機: 0944-444-444
電子信箱: DoLaLa@gmail.com
住址: Japan
1:
姓名: 天線寶寶(丁丁)
手機: 0954-788-438
電子信箱: a54385478@yahoo.com.tw
住址: Earth
Json 解碼 4 (解未知結構):
package main
import (
"encoding/json"
"fmt"
)
func main() {
b := []byte(`{
"Name":"天羽美羽",
"Dolls":["Rabbit","Cat","Bear","Dog"],
"EMail":"aaa1111@yahoo.com",
"Age":17,
"Price":9.99,
"Sales":10000000
}`)
var r interface{}
json.Unmarshal(b, &r)
loli, ok := r.(map[string]interface{})
if ok {
for k, v := range loli {
switch v2 := v.(type) {
case string:
fmt.Println("Key:", k, ",Value:", v2, ",型別是 string")
case int:
fmt.Println("Key:", k, ",Value:", v2, ",型別是 int")
case float64:
fmt.Println("Key:", k, ",Value:", v2, ",型別是 float64")
case bool:
fmt.Println("Key:", k, ",Value:", v2, ",型別是 bool")
case []interface{}:
fmt.Println(k, "是 陣列:", v2)
for i, iv := range v2 {
fmt.Println(i, ":", iv)
}
default:
fmt.Println(k, " 是其他型別...")
}
}
}
}
輸出結果:
Key: Sales ,Value: 1e+07 ,型別是 float64
Dolls 是 陣列: [Rabbit Cat Bear Dog]
0 : Rabbit
1 : Cat
2 : Bear
3 : Dog
Key: Age ,Value: 17 ,型別是 float64
Key: Name ,Value: 天羽美羽 ,型別是 string
Key: Price ,Value: 9.99 ,型別是 float64
Key: EMail ,Value: aaa1111@yahoo.com ,型別是 string
留言列表