āļŠāļĢāļļāļāļŠāļąāđāļ āđ
āļŠāļ§āļąāļŠāļāļĩāļāļĢāļąāļ ! āđāļāļāļāļāļ§āļēāļĄāļāļĩāđāđāļĢāļēāļāļ°āļĄāļēāļāļģāļāļ§āļēāļĄāļĢāļđāđāļāļąāļāļāļąāļ JSON āđāļĨāļ°āļāļĢāļ°āļāļ§āļāļāđāļēāļāđāļēāļ āđ āđāļāļ āļēāļĐāļē Go āđāļŦāđāļāļģāļāļēāļāļĢāđāļ§āļĄāļāļąāļ JSON āđāļāđ āļāļ°āļĄāļĩāļ§āļīāļāļĩāļāļēāļĢāļĒāļąāļāđāļāļāđāļēāļāđāļāļāļđāļāļąāļ !!
āđāļāļĩāļĒāļāđāļāļĒ
Sirasit Boonklang (Aeff)
Tech and Coding Consultant
āļāļāļāļ§āļēāļĄāļāļĩāđāļāļĩāļāļīāļĄāļāđ āđāļĨāļ° āđāļāļĒāđāļāļĢāđāđāļĄāļ·āđāļ 03 āļĄāļĩāļāļēāļāļĄ 2566
āļŠāļīāđāļāļāļĩāđāļāļ°āđāļāđāđāļĢāļĩāļĒāļāļĢāļđāđāđāļāļāļāļāļ§āļēāļĄ
1. āļĢāļđāđāļāļąāļāļāļąāļ JSON
2. āđāļāļĨāļ Go Object â JSON āļāļēāļ map
3. āđāļāļĨāļ Go Object â JSON āļāļēāļ struct
4. āļāļēāļĢāļāļģāđāļŦāđ output JSON āļāļđāļāđāļēāļĒāļāļķāđāļāļāđāļ§āļĒ `MarshalIndent`
5. āļāļēāļĢāđāļāļĨāļ JSON āđāļāđāļāđāļ Go Object
6. āļāļēāļĢāļāđāļēāļāđāļāļĨāđ JSON
7. āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĨāđ JSON
8. āļāļąāļ§āļāđāļ§āļĒāđāļāļāļēāļĢāđāļāļĨāļ JSON-to-Go
1. āļĢāļđāđāļāļąāļāļāļąāļ JSON
JSON āļĒāđāļāļĄāļēāļāļēāļ JavaScript Object Notation āđāļāđāļāļĢāļđāļāđāļāļāļāđāļāļĄāļđāļĨāđāļāļāļēāļĢāļāļąāļāđāļāđāļāđāļĨāļ°āđāļĨāļāđāļāļĨāļĩāđāļĒāļāļāđāļāļĄāļđāļĨ āđāļāđāļāļĢāļđāļāđāļāļāļāļāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļīāļĒāļĄāđāļāđ āđāļāļēāđāļ§āđāđāļĨāļāđāļāļĨāļĩāđāļĒāļāļāđāļāļĄāļđāļĨāļĢāļ°āļŦāļ§āđāļēāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđ āđāļ§āđāļāđāļāļāļāļĨāļīāđāļāļāļąāļ āđāļāļāļĄāļ·āļāļāļ·āļāđāļĨāļ°āļāļāļāļāđāđāļ§āļĢāđ āđāļāļĢāđāļāļĢāļĄāļāđāļēāļ āđ āđāļ JSON āļāđāļāļĄāļđāļĨāļāļ°āļāļđāļāļāļąāļāļĢāļ°āđāļāļĩāļĒāļāđāļāđāļāļāļđāđ āļĄāļĩ key āļāļąāļ value āđāļāđāļĨāļ° key āđāļāđāļ string āđāļĨāļ°āđāļāđāļĨāļ° value āļāļēāļāđāļāđāļ string, number, boolean, array, āļŦāļĢāļ·āļ JSON object āļāļ·āđāļ āđ āļāđāđāļāđ
āļŦāļāđāļēāļāļēāļāļāļ JSON
{
"key", value
}
āļŦāļāđāļēāļāļēāļāļāļ JSON
{
"key", value
}
āđāļāļĒāđāļāļāļēāļĢāļŠāļĢāđāļēāļ Web Service āļāđāļ§āļĒ Go āļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđāļŦāļĨāļēāļĒāđāļāļāđāļĄāđāļ§āđāļēāļāļ°āđāļāđāļāđāļāđ Framework āļŦāļĢāļ·āļāļāļ°āđāļāđāđāļāđāļ Standard Package āļāļĒāđāļēāļ net/http āļāļĩāđāļĄāļēāļāļĢāđāļāļĄāļāļąāļ Go āļāļĒāļđāđāđāļĨāđāļ§āļāđāđāļāđ āđāļāđāļāđāļāđāļāļāļāļĩāđāļĄāļĩāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļĩāđāļāļģāđāļāđāļāļāļąāđāļāļŦāļĄāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļ Web Service āļĢāļ§āļĄāļāļķāļāļāļēāļĢāļāļģāļŦāļāļ Route āļāļēāļĢāđāļŦāđāļāļĢāļīāļāļēāļĢāđāļāļĨāđ āđāļĨāļ°āļāļēāļĢāļāļąāļāļāļēāļĢ HTTP requests/responses āļāđāļēāļ āđ
āļāļąāļ§āļāļĒāđāļēāļāļāđāļāļĄāļđāļĨ
{
"name": "Aef",
"age": 24,
"pets": ["dog", "cat"]
}
āđāļĄāļ·āđāļāđāļĢāļēāđāļāđāļĢāļđāđāļāļąāļāļāļąāļāđāļāļĨāđ JSON āđāļāļāđāļ§ āđ āļāļąāļāđāļāđāļĨāđāļ§āđāļāļĩāđāļĒāļ§āđāļĢāļēāļĄāļēāļāļđāļ§āļīāļāļĩāļāļēāļĢāđāļāđāļāļēāļāđāļāļĨāđ JSON āļāļąāļ Go āļāļąāļāļāļĩāļāļ§āđāļē
āđāļāļĒāđāļāļ āļēāļĐāļē Go āļāļ°āļĄāļĩ Standard Library āļŦāļĢāļ·āļ Package āļāļĩāđāļĄāļēāļāļąāļ Go āļāļĒāļđāđāđāļĨāđāļ§āđāļĄāđāļāđāļāļāļĨāļāđāļāļīāđāļĄ āļāļąjāļāļāđāļāļ·āļ encoding/json package āđāļāļĒāđāļāđāļēāļāļąāļ§āļāļĩāđāļĄāļąāļāļĄāļĩ API āļŠāļģāļŦāļĢāļąāļāļŠāļĢāđāļēāļ JSON documents āļāļēāļ Go Object āļāļĒāļđāđ
āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāđāļāļĨāļāđāļāđāļāļĨāļāļāļĨāļąāļ āļāļēāļ JSON āđāļ Go āļāļēāļ Go āđāļ JSON āđāļāđ
āđāļāļĨāļāļāļēāļ Go Object āđāļāđāļāđāļ JSON āđāļāđ Marshaling
āļāļēāļĢāđāļāļĨāļāļāļēāļ Go Object āđāļāđāļāđāļ JSON āļāļ°āļāļģāļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠ Go Object āđāļāđāļāđāļāļĢāļđāļāđāļāļ JSON āđāļāļĒāđāļāđāļŠāļīāđāļāļāļĩāđāđāļĢāļĩāļĒāļāļ§āđāļē marshaling āđāļāļĒ marshaling āđāļāđāđāļĄāļ·āđāļāļāđāļāļāļāļēāļĢāļŠāđāļāļŦāļĢāļ·āļāļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāđāļāļĢāļđāļāđāļāļāļāļĩāđāļŠāļēāļĄāļēāļĢāļāļāđāļēāļāđāļĨāļ°āđāļāđāļēāđāļāđāļāđāļāđāļēāļĒāđāļāļĒāđāļāļāļāļ·āđāļ āđ āđāļāļĒ marshaling āđāļ Go āļĄāļĩ syntax āļāļąāļāļāļĩāđ
func Marshal(v interface{}) ([]byte, error)
āđāļāļĒāļāļąāļāļāđāļāļąāļāļāļĩāđāļāļ°āļĢāļąāļ interface āļ§āđāļēāļ āđ āđāļāļĒāđāļĢāļēāļŠāļēāļĄāļēāļĢāļāđāļāđāđāļāđāļāļāđāļāļĄāļđāļĨāļāļĢāļ°āđāļ āļāđāļāļāđāđāļāđ āđāļĄāđāļ§āđāļēāļāļ°āđāļāđāļ int, float, string, map, struct āļŦāļĢāļ·āļ āļāļ·āđāļ āđ āđāļĨāđāļ§āļāļąāļ§āļāļąāļāļāđāļāļąāļāļāļĩāđāļāļ° return āļāđāļāļĄāļđāļĨāļĄāļē 2 āļāļąāļ§āļāļąāđāļāļāļ·āļ []byte(JSON āļāļĩāđāđāļāđāļēāļĢāļŦāļąāļŠ, error)
2. āđāļāļĨāļ Go Object â JSON āļāļēāļ map
āļāļ·āđāļāđāļāļĨāđ : Simple_GO2JSON.go
package main
import (
"encoding/json"
"fmt"
)
func main() {
Coffee := map[string]int{
"Latte": 55,
"Cappuccino": 50,
"Americano": 45,
}
bytes, _ := json.Marshal(Coffee)
fmt.Println(string(bytes))
}
āļāļĨāļāļĩāđāđāļāđāļāļēāļāļāļēāļĢāļĢāļąāļāđāļāļĢāđāļāļĢāļĄāļāđāļēāļāļāļ āđāļāļĒāđāļāđāļāļģāļŠāļąāđāļ go run Simple_GO2JSON.go
āļŦāļēāļāļāđāļāļāļāļēāļĢāļāļđāļāļāļīāļāļāļāļāļāļąāļ§āđāļāļĢāļāļāļāļāļĨāļĨāļąāļāļāđāļāđāļ§āļĒāļāđāļŠāļēāļĄāļēāļĢāļāđāļāđ print format āļāđāļ§āļĒ fmt.Printf() āļ āļēāļĒāđāļ â â āđāļŦāđāđāļāđāđāļāđāļ %T āđāļĨāđāļ§āđāļāļāļŠāđāļ§āļāļāļĩāđāļāļ°āđāļŠāļāļāļāļāļīāļāļāļāļāļāļąāļ§āđāļāļĢāļāļąāđāļ āđ āđāļāđāđāļĨāļĒ
//āļāļĢāļ§āļāļŠāļāļāļāļāļīāļāļāļāļāļāļĨāļĨāļąāļāļāđ
fmt.Printf("Type of bytes %T\n", bytes)
āļĨāļāļāļāļģāļāļēāļĢāļĢāļąāļāļāļĩāļāļāļĢāļąāđāļāđāļāđāļāļĨāđāđāļāļīāļĄ āļāđāļ§āļĒāļāļģāļŠāļąāđāļ go run Simple_Go2JSON.go
3. āđāļāļĨāļ Go Object â JSON āļāļēāļ struct
āļāļāļāļāļēāļāļāđāļēāļāļĩāđāđāļĢāļēāļāļ°āđāļāđ map āđāļĨāđāļ§ āđāļĢāļēāļĒāļąāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļēāļĢāļŦāļąāļŠ JSON āļāļēāļ struct āđāļāđ āļāļēāļāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāđāļēāļāļĨāđāļēāļāļāļĩāđ
āđāļĢāļēāļāļ°āļāļģāļāļēāļĢāļāļģāļŦāļāļ struct āļāļāļ Coffee āļāļĩāđāļ āļēāļĒāđāļāļāļ°āļĄāļĩ 3 āļāļīāļĨāļāđāļāļąāļāļāļĩāđ Menu, Price āđāļĨāļ° Quantity āđāļĨāđāļ§āđāļ main āļāļąāļāļāđāļāļąāļāļāļ°āļĄāļĩāļāļēāļĢāļŠāļĢāđāļēāļ object āļŦāļĨāļąāļāļāļēāļāļāļąāđāļāđāļāđāļāļąāļāļāđāļāļąāļ `json.Marshal()` āđāļāļāļēāļĢāđāļāļĨāļ object āđāļāđāļāđāļ JSON āļāļąāļāļāđāļāļąāļāļāļĩāđāļāļ° return err āļāļąāļ āļāđāļāļĄāļđāļĨāļāļĩāđāđāļāđāļ bytes āļĄāļē āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāđāļāđ string āđāļāļāļēāļĢāļāļĢāļāļāļāđāļāļĄāļđāļĨ bytes āđāļŦāđāđāļŠāļāļāļĄāļēāđāļāđāļ string āđāļĨāđāļ§āļāļģāļāļēāļĢāđāļāđ `fmt.Println()` āđāļāļāļēāļĢāđāļŠāļāļāļāļĨāļĨāļąāļāļāđāļāļāļāļĄāļē
āļāļ·āđāļāđāļāļĨāđ : Simple_Go2JSON_struct.go
package main
import (
"encoding/json"
"fmt"
)
type Coffee struct {
Menu string
Price int
Quantity int
}
func main() {
myCoffee := Coffee{"Cappuccino", 50, 2}
bytes, _ := json.Marshal(myCoffee)
fmt.Println(string(bytes))
}
āđāļĄāļ·āđāļāđāļāļĩāļĒāļāđāļāđāļāđāļŠāļĢāđāļāđāļĢāļēāļāđāļāļģāļāļēāļĢāļĢāļąāļāđāļāļĢāđāļāļĢāļĄ āđāļāļĒāđāļāđāļāļģāļŠāļąāđāļ go run Simple_Go2JSON_struct.go āđāļĨāļ°āļāļ°āđāļāđāļāļĨāļĨāļąāļāļāđāļāļāļāļĄāļēāļāļĒāļđāđāđāļāļĢāļđāļāđāļāļ JSON āļāļąāđāļāđāļāļ !!!
āđāļĄāļ·āđāļāļāļĩāđāđāļĢāļēāđāļāđāļāļđāļāļąāļ§āļāļĒāđāļēāļāļāđāļēāļĒ āđ āļāļĩāļāļĩāđ āđ āļāļąāļāđāļāđāļĨāđāļ§ āļĨāļāļāļāļģāđāļŦāđāļĄāļąāļāļāļąāļāļāđāļāļāļāļķāđāļāļŦāļāđāļāļĒāļāļĩāļāļ§āđāļē āđāļāļĒāđāļĢāļēāļāļ°āđāļĢāļīāđāļĄāļāļēāļāļāļēāļĢāļāļĩāđāļĄāļĩāļāļēāļĢāļāļģāļŦāļāļāđāļŦāđ JSON āļāļĩāđāļāđāļāļĄāļđāļĨāļāļĨāļĨāļąāļāļāđāļāļāļāđāļĢāļēāļĄāļĩ object āļāđāļāļ object āļāļąāļ āđāļĨāđāļ§āļāļāđāļāđāļāđāļāđāļāđāļ Go āļŦāļēāļāđāļĢāļēāļāđāļāļāļāļēāļĢāđāļāļĨāļāđāļŦāđāļāļāļāļĄāļēāđāļāđāļ JSON āđāļāļĩāđāļĒāļ§āđāļĢāļēāļĄāļēāļāļđāļāļąāļāļ§āđāļēāļāđāļāļāļāļąāļāļāļēāļĢāļŦāļĢāļ·āļāļĄāļĩāļāļąāđāļāļāļāļāđāļāļāđāļēāļ
- āđāļĢāļīāđāļĄāļāļēāļāļāļģāļāļēāļĢāļāļąāļ struct āļāļāļāļāđāļāļĄāļđāļĨ āļāļģāļŦāļāļāļ§āđāļēāđāļāđāļĨāļ°āļāļīāļĨāļāđāļāļ·āđāļāļāļ°āđāļĢ āļāļāļīāļāđāļāđāļāļāļ°āđāļĢ āđāļĨāļ°āļāļģāļŦāļāļ key āļāļāļ JSON āđāļāđāļāđāļĨāļ°āļāļīāļĨāļāđ āļŦāļēāļāļāđāļāļāļāļēāļĢāļāļģ struct āļāđāļāļ struct āļāđāļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļāļāļīāļĨāļāđāļāļĩāđāđāļāđāļāļāļāļīāļāļāļāļ struct āļāļąāđāļ āđ āđāļāđāđāļĨāļĒ āđāļāļāļąāļ§āļāļĒāđāļēāļāļāļĩāđāļāļ°āđāļāđāđāļāđāļ Ingredient āļāļĩāđāđāļāđāļ struct āđāļĨāļ°āđāļāđāļāļāļīāļĨāļāđāļŦāļāļķāđāļāđāļ struct āļāļ·āđāļāļ§āđāļē `MenuItem`
- āđāļĄāļ·āđāļāđāļĢāļēāļāļģāļāļēāļĢāļŠāļĢāđāļēāļ struct āļāļāļāļāđāļāļĄāļđāļĨāđāļĢāļĩāļĒāļāļĢāđāļāļĒāđāļĨāđāļ§āļāđāļĨāļāļāļāļģāļāļēāļĢāļŠāļĢāđāļēāļ object āļāļāļāļāđāļāļĄāļđāļĨāļāļąāļ§āļāļĒāđāļēāļāđāļāļēāđāļ§āđ āđāļāļĒāđāļāļāļąāļ§āļāļĒāđāļēāļāļāļĩāđāļāļ°āđāļŦāđ object āđāļāđāļāļāļĒāļđāđāđāļāļāļąāļ§āđāļāļĢāļāļ·āđāļāļ§āđāļē menu
- āđāļĨāđāļ§āđāļĢāļēāļāđāđāļāđāļāļąāļāļāđāļāļąāļ `json.Marshal()` āđāļāļāļēāļĢāđāļāļĨāļ Go Object āđāļāđāļ JSON
- āđāļĨāđāļ§āļĢāļāļāļāļĩāđāđāļĢāļēāļāļ°āļāļģāļāļēāļĢāļĢāļąāļ error āļĄāļēāļāđāļ§āļĒ āđāļĨāđāļ§āļāđāđāļāđāļ error āļāđāļ§āļĒāļāļģāļŠāļąāđāļ
if err != nil {
fmt.Println("Error:", err)
return
}
- āļāđāļēāđāļāļīāļāļ§āđāļēāđāļĄāđāļĄāļĩ error āļĄāļąāļāļāđāļāļ°āļāļģāļāļēāļĢāđāļāļĨāļāļāļāļāļĄāļēāđāļāđāļ bytes āđāļĨāđāļ§āđāļĢāļēāļāđāļāļĢāļāļ string āđāļĨāļ°āļāļģāļāļēāļĢ println āļāļāļāļĄāļēāđāļŦāļĄāļ·āļāļāļāļąāļāļāļąāļ§āļāļĒāđāļēāļāļāđāļāļāļŦāļāđāļēāļāļĩāđāđāļāđāđāļĨāļĒāļĒāļĒ
package main
import (
"encoding/json"
"fmt"
)
type Ingredient struct {
Name string `json:"name"`
Quantity int `json:"quantity"`
Unit string `json:"unit"`
}
type MenuItem struct {
Name string `json:"name"`
Description string `json:"description"`
Price float64 `json:"price"`
Ingredients []Ingredient `json:"ingredients"`
}
func main() {
// Define a slice of menu items
menu := []MenuItem{
{
Name: "Americano",
Description: "A classic espresso drink",
Price: 2.50,
Ingredients: []Ingredient{
{
Name: "Espresso",
Quantity: 1,
Unit: "shot",
},
{
Name: "Water",
Quantity: 6,
Unit: "oz",
},
},
},
{
Name: "Latte",
Description: "Espresso with steamed milk",
Price: 4.00,
Ingredients: []Ingredient{
{
Name: "Espresso",
Quantity: 2,
Unit: "shot",
},
{
Name: "Milk",
Quantity: 8,
Unit: "oz",
},
},
},
}
// Marshal the menu items as a JSON string
jsonString, err := json.Marshal(menu)
if err != nil {
fmt.Println("Error:", err)
return
}
// Print the JSON string to the console
fmt.Println(string(jsonString))
}
āđāļĄāļ·āđāļāđāļĢāļēāļāļģāļāļēāļĢāļĢāļąāļāļāđāļ§āļĒāļāļģāļŠāļąāđāļ go run Simple_Go2JSON_struct_complex.go āļāļ°āđāļŦāđāļāđāļāđāļ§āđāļēāļāļĨāļĨāļąāļāļāđāļāđāļāļāļāļĄāļēāđāļĨāđāļ§ āđāļāđāļĄāļąāļāļāļ°āļāļđāļĒāļēāļāđāļāļŦāļāđāļāļĒ āđāļāļĢāļēāļ°āļĄāļąāļāļāđāļāļāļąāļāđāļāđāļāļāļĢāļ·āļāđāļĨāļĒāļĒāļĒ āļāļĩāđāļāļĩāđāđāļāļĩāļĒāļ§āđāļĢāļēāļĄāļēāļāļđāļ§āļīāļāļĩāđāļāđāđāļāļāđāļāļāđāļāđāļāļāļąāļ !!!
4. āļāļēāļĢāļāļģāđāļŦāđ output JSON āļāļđāļāđāļēāļĒāļāļķāđāļāļāđāļ§āļĒ MarshalIndent
āļ§āļīāļāļĩāđāļāđāđāļĢāļēāļŠāļēāļĄāļēāļĢāļāđāļāđ json.MarshalIndent() āđāļāļ json.Marshal() āđāļāļĒ MarshalIndent āđāļŦāļĄāļ·āļāļāļāļąāļ Marshal āđāļāđāđāļāđ Indent āđāļāļ·āđāļāļāļąāļāļĢāļđāļāđāļāļāļāļāļāļāļĨāļĨāļąāļāļāđāļĄāļēāđāļŦāđāļāđāļ§āļĒ āļŠāđāļ§āļāļāļāļāđāļāđāļāļāļĩāđāļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļąāļāđāļāļĨāđāļāđāļēāļāļāļāđāļāđāđāļĨāļĒ āđāļāđāđāļāļĨāļĩāđāļĒāļāļāļēāļ json.Marshal() āđāļāđāļāđāļ json.MarshalIndent()
jsonString, err := json.MarshalIndent(menu, "", " ")
if err != nil {
fmt.Println("Error:", err)
return
}
āļŦāļĨāļąāļāļāļēāļāļāļąāđāļāļŠāļēāļĄāļēāļĢāļāļĢāļąāļāļāļĩāļāļāļĢāļąāđāļāđāļāļĒāđāļāđāļāļģāļŠāļąāđāļ go run Simple_Go2JSON_struct_complex.go āđāļĨāđāļ§āļāļĨāļĨāļąāļāļāđāļāļ°āļāļāļāļĄāļēāđāļāđāļ JSON āļāļĩāđāļĄāļĩāļŦāļāđāļēāļāļēāļŠāļ§āļĒāļāļēāļĄ āļāđāļēāļāļāđāļēāļĒāđāļĨāđāļ§āļāļąāđāļāđāļāļ
āļāđāļāļĄāļēâĶāđāļĨāđāļ§āļāđāļēāđāļāļīāļāļ§āđāļēāđāļĢāļēāļāđāļāļāļāļēāļĢāļāļĩāđāļāļ°āđāļŦāđāļāļēāļāļāļīāļĨāļāđāđāļĄāđāđāļŠāļāļ āđāļĢāļēāļāđāļŠāļēāļĄāļēāļĢāļāđāļāđ – āđāļāļ·āđāļāļāļģāļāļēāļĢ ignore āļāļīāļĨāļāđāļāļąāđāļ āđ āđāļāđāļ§āđāļēāđāļĄāđāļāđāļāļāđāļŠāļāļāļāļ° āđāļāđāļāđāļĒāļąāļāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļąāđāļāļĄāļēāļāļĒāļđāđ
type MenuItem struct {
Name string `json:"name"`
Description string `json:"-"`
Price float64 `json:"price"`
Ingredients []Ingredient `json:"-"`
}
āđāļĄāļ·āđāļāļĨāļāļāļāļģāļāļēāļĢāļĢāļąāļāļāļĩāļāļāļĢāļąāđāļāļāļ°āđāļŦāđāļāļ§āđāļēāļāļĨāļĨāļąāļāļāđāļāļ°āđāļŠāļāļāđāļāļāļēāļ°āļāļīāļĨāļāđāļāļĩāđāđāļĢāļēāđāļĄāđāđāļāđāļāļģāļŦāļāļāđāļŦāđ ignore āļāđāļēāļāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒ –
āđāļĄāļ·āđāļāđāļĢāļēāđāļāđāļāļģāļāļēāļĢāđāļĢāļĩāļĒāļāļĢāļđāđāđāļāļĩāđāļĒāļ§āļāļąāļāļ§āļīāļāļĩāđāļāļāļēāļĢāđāļāļĨāļ Go Object āđāļāđāļāđāļ JSON āļāļĢāđāļāļĄāđāļāļāļāļīāļāđāļāļāļēāļĢāļāļģāđāļŦāđāļāļĨāļĨāļąāļāļāđāļāļāļāļĄāļēāļŠāļ§āļĒāļāļēāļĄāļāđāļēāļāļāđāļēāļĒāđāļĨāđāļ§ āļāđāļāļĄāļēāđāļĢāļēāļāđāļāļ°āļāđāļāļāļĄāļēāļāļđāļ§āļīāļāļĩāđāļāļāļēāļĢāđāļāļĨāļāļāļēāļ JSON āđāļŦāđāđāļāđāļāđāļ Go Object āđāļāļēāđāļ§āđāđāļāđāđāļ§āļĨāļēāļāļĩāđāđāļĢāļēāļāđāļāļāļāļēāļĢāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļāđāļ JSON āļĄāļē āđāļĨāđāļ§āļāđāļāļāļāļēāļĢāđāļāļĨāļāđāļāđāļ object āđāļāļ·āđāļāļāļĩāđāļāļ°āđāļāļēāđāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļ
5. āļāļēāļĢāđāļāļĨāļ JSON āđāļāđāļāđāļ Go Object
āđāļāļĒāđāļāļāļēāļĢāđāļāļĨāļāļāļĨāļąāļāļāļēāļ JSON Format āđāļŦāđāđāļāđāļ Go Object āđāļĢāļēāļāļ°āđāļāđāļāļąāļāļāđāļāļąāļāļāļ·āđāļāļ§āđāļē json.Unmarshal() āđāļāļĒāđāļŠāđāļāđāļēāļāļąāļ§āđāļāļĢāļāļĩāđāļĄāļĩāļāđāļāļĄāļđāļĨ JSON āđāļāđāļēāđāļāđāļ []byte(āļāļąāļ§āđāļāļĢāļāļĩāđāļĄāļĩāļāđāļāļĄāļđāļĨJSON) āđāļĨāļ° &āļāļāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļĢāļēāļŠāļĢāđāļēāļāđāļāļēāđāļ§āđāļĢāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļĨāđāļ§ āļŦāļĨāļąāļāļāļēāļāļāļąāđāļāļāļąāļāļāđāļāļąāļāļāļĩāđāļāļ°āļāļģāļāļēāļĢāļāļ·āļāļāđāļē err āļāļāļāļĄāļēāđāļĨāđāļ§āđāļĢāļēāļāđāļāļģāļāļēāļĢāđāļāđāļ error āđāļĨāđāļ§āļāļģāļāļēāļĢāđāļŠāļāļāļāļĨāļĨāļąāļāļāđāļāļāļāļĄāļēāļāđāļēāļāļāļēāļ fmt.Printf()
āļāļ·āđāļāđāļāļĨāđ : Simple_Unmarshaling.go
package main
import (
"encoding/json"
"fmt"
)
type MenuItem struct {
Name string `json:"name"`
Description string `json:"description"`
Price float64 `json:"price"`
}
func main() {
// Define a JSON string representing a menu item
jsonString := `{
"name": "Americano",
"description": "A classic espresso drink",
"price": 2.50
}`
// Unmarshal the JSON string into a MenuItem struct
var menuItem MenuItem
err := json.Unmarshal([]byte(jsonString), &menuItem)
if err != nil {
fmt.Println("Error:", err)
return
}
// Print the menu item to the console
fmt.Printf("%s (%s): $%.2f\n", menuItem.Name, menuItem.Description, menuItem.Price)
}
āļŦāļĨāļąāļāļāļēāļāļāļĩāđāđāļĢāļēāđāļāđāļāļģāļāļēāļĢāđāļāļĩāļĒāļāđāļŠāļĢāđāļāđāļĨāđāļ§āļāđāļāļģāļāļēāļĢāļĢāļąāļāļāđāļ§āļĒāļāļģāļŠāļąāđāļ go run Simple_Unmarshaling.go āļāļ°āđāļŦāđāļāđāļāđāļ§āđāļēāļāđāļāļĄāļđāļĨāļāļāļāļĄāļēāđāļĨāđāļ§āđāļāļĢāļđāļāđāļāļāļāļāļ Go Object
āđāļĄāļ·āđāļāđāļĢāļēāļāļđāļāļąāļ§āļāļĒāđāļēāļāđāļāļāļāđāļēāļĒ āđ āļāļĩāđāļāļĩāđ āđ āđāļāđāļĨāđāļ§ āļāđāļĄāļēāļĨāļāļāđāļāļĨāļ JSON āđāļāđāļāđāļ Go Object āļāļĩāđāļĄāļĩāļāļ§āļēāļĄāļĒāļēāļāđāļĨāļ°āļāļąāļāļāđāļāļāļāļķāđāļāļāļĩāļāļŦāļāđāļāļĒ āđāļāļĒāļāļēāļĢāļāļģāļŦāļāļ struct āļāļāļāļāđāļāļĄāļđāļĨāļāļ°āđāļŦāļĄāļ·āļāļāļāļąāļāđāļāļĨāđ Simple_Go2JSON_struct_complex.go āđāļĨāļĒ
āđāļāđāđāļĢāļēāļāļ°āļāļģāļŦāļāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļāđāļ JSON āļĄāļē āđāļĨāđāļ§āļāļģāļāļēāļĢāđāļāđ json.Unmarshal() āđāļŠāļāļāļāļĨāļāļēāļĢāđāļāļĨāļ JSON āđāļāđāļāđāļ Go Object āđāļāļāđāļāđāļāļāđāļēāļāļāļāđāļāđāđāļĨāļĒ
package main
import (
"encoding/json"
"fmt"
)
type Ingredient struct {
Name string `json:"name"`
Quantity int `json:"quantity"`
Unit string `json:"unit"`
}
type MenuItem struct {
Name string `json:"name"`
Description string `json:"description"`
Price float64 `json:"price"`
Ingredients []Ingredient `json:"ingredients"`
}
func main() {
// Define a JSON string representing a slice of menu items
jsonString := `[
{
"name": "Americano",
"description": "A classic espresso drink",
"price": 2.50,
"ingredients": [
{
"name": "Espresso",
"quantity": 1,
"unit": "shot"
},
{
"name": "Water",
"quantity": 6,
"unit": "oz"
}
]
},
{
"name": "Latte",
"description": "Espresso with steamed milk",
"price": 4.00,
"ingredients": [
{
"name": "Espresso",
"quantity": 2,
"unit": "shot"
},
{
"name": "Milk",
"quantity": 8,
"unit": "oz"
}
]
}
]`
// Unmarshal the JSON string into a slice of MenuItem structs
var menuItems []MenuItem
err := json.Unmarshal([]byte(jsonString), &menuItems)
if err != nil {
fmt.Println("Error:", err)
return
}
// Print the name, description, and price of each menu item to the console
for _, menuItem := range menuItems {
fmt.Printf("%s (%s): $%.2f\n", menuItem.Name, menuItem.Description, menuItem.Price)
}
}
āđāļĄāļ·āđāļāđāļĢāļēāļāļģāļāļēāļĢāđāļāļĨāļāđāļŠāļĢāđāļāđāļĢāļĩāļĒāļāļĢāđāļāļĒāļāđāļāļģāļāļēāļĢāđāļŠāļāļāļāļĨāļĨāļąāļāļāđāđāļāļĒāļāļēāļĢāļĢāļąāļ go run Simple_Unmarshaling_complex.go
āđāļĄāļ·āđāļāđāļĢāļēāļāļģāļāļēāļĢāđāļāļĨāļāđāļ-āđāļāļĨāļāļāļĨāļąāļāļĢāļ°āļŦāļ§āđāļēāļ Go āļāļąāļ JSON āđāļĨāđāļ§āļāđāļāļĄāļēāđāļĢāļēāļĄāļēāļāļđāļ§āļīāļāļĩāļāļēāļĢāđāļāļĩāļĒāļāđāļĨāļ°āļāđāļēāļāđāļāļĨāđ JSON
āđāļāļĒāđāļĢāļēāļāđāļāļāļĄāļĩāļāļąāļ§āļāļĒāđāļēāļāļāđāļāļĄāļđāļĨ JSON āļĄāļēāļāđāļāļ āđāļĨāļ°āđāļāļāļĩāđāļāļĩāđāđāļĢāļēāļāļ°āļŠāļĢāđāļēāļāđāļāļĨāđāļāļąāļ§āļāļĒāđāļēāļāļāļķāđāļāļĄāļēāļāļ·āđāļāļ§āđāļē `coffee.json`
āļāļ·āđāļāđāļāļĨāđ : coffee.json
[
{
"name": "Americano",
"description": "A classic espresso drink",
"price": 2.50,
"ingredients": [
{
"name": "Espresso",
"quantity": 1,
"unit": "shot"
},
{
"name": "Water",
"quantity": 6,
"unit": "oz"
}
]
},
{
"name": "Latte",
"description": "Espresso with steamed milk",
"price": 4.00,
"ingredients": [
{
"name": "Espresso",
"quantity": 2,
"unit": "shot"
},
{
"name": "Milk",
"quantity": 8,
"unit": "oz"
}
]
}
]
6. āļāļēāļĢāļāđāļēāļāđāļāļĨāđ JSON
āđāļāļĒāđāļāļāļēāļĢāļāđāļēāļāđāļāļĨāđāđāļĢāļēāļāļ°āđāļāđ package io/ioutil āļĄāļēāđāļāđāđāļāļāļēāļĢāļāđāļēāļāđāļāļĩāļĒāļāđāļāļĨāđ āļāđāļāļĄāļēāđāļĢāļēāļāļ°āļĄāļēāđāļĢāļīāđāļĄāđāļāļĒāļāļēāļĢāļŠāļĢāđāļēāļ struct āļāļāļāļāđāļāļĄāļđāļĨāļĄāļēāđāļāļĢāļĩāļĒāļĄāđāļ§āđāļāđāļāļ āđāļĨāđāļ§āđāļāđ ioutil.ReadFile() āđāļāļāļēāļĢāļāđāļēāļāđāļāļĨāđāļĄāļē āļāđāļēāļāđāļāļāđāļāļģāļāļēāļĢāđāļŠāđāļāļ·āđāļāđāļāļĨāđāļŦāļĢāļ·āļ path āđāļāđāļēāđāļ āļŦāļĨāļąāļāļāļēāļāļāļąāđāļāļāļģāļāļēāļĢāđāļāđāļ error āđāļĨāđāļ§āļāļģāļāļēāļĢāđāļĒāļāļāđāļāļĄāļđāļĨāđāļ JSON āđāļĨāļ°āđāļāļĨāļāđāļāđāļāđāļ Go Object āļāđāļ§āļĒ json.Unmarshal(bytes, &coffees) āļāļąāđāļāđāļāļ
āļāļ·āđāļāđāļāļĨāđ : ReadJSON.go
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
)
type Ingredient struct {
Name string `json:"name"`
Quantity int `json:"quantity"`
Unit string `json:"unit"`
}
type Coffee struct {
Name string `json:"name"`
Description string `json:"description"`
Price float64 `json:"price"`
Ingredients []Ingredient `json:"ingredients"`
}
func main() {
// Read the JSON file
bytes, err := ioutil.ReadFile("coffee.json")
if err != nil {
log.Fatal(err)
}
// Parse the JSON data
var coffees []Coffee
err = json.Unmarshal(bytes, &coffees)
if err != nil {
log.Fatal(err)
}
// Print the coffee data
for _, coffee := range coffees {
fmt.Printf("Name: %s\n", coffee.Name)
fmt.Printf("Description: %s\n", coffee.Description)
fmt.Printf("Price: %.2f\n", coffee.Price)
fmt.Println("Ingredients:")
for _, ingredient := range coffee.Ingredients {
fmt.Printf("- %s: %d %s\n", ingredient.Name, ingredient.Quantity, ingredient.Unit)
}
fmt.Println()
}
}
āđāļĄāļ·āđāļāļāļģāļāļēāļĢāđāļāļĩāļĒāļāđāļāđāļāđāļŠāļĢāđāļāđāļĨāđāļ§āđāļĢāļēāļāđāļāļģāļāļēāļĢāļĨāļāļāļĢāļąāļāđāļāļĒāđāļāđāļāļģāļŠāļąāđāļ go run ReadJSON.go
7.āđāļāļĩāļĒāļāđāļāļĨāđ JSON
āļāđāļāļĄāļēāđāļĢāļēāļĄāļēāļāļĩāđāļāļĢāļ°āļāļ§āļāļāđāļēāļŠāļļāļāļāđāļēāļĒāļāļąāđāļāļāļ·āļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĨāđ JSON āļāļāļāđāļĢāļēāļāļąāđāļāđāļāļ āđāļāļĒāđāļĢāļēāļāļ°āđāļāđ package os āđāļāļ·āđāļāļāļĩāđāļāļ°āđāļāđāļāļąāļāļāđāļāļąāļāđāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĨāđāļāđāļēāļ āđ āđāļāļĒāļāļēāļāđāļāđāļāļāđāļēāļāļĨāđāļēāļāđāļĢāļēāļāđāļāļģāļāļēāļĢāļŠāļĢāđāļēāļ struct āļĢāļāđāļ§āđāđāļŦāļĄāļ·āļāļāļāļąāļ§āļāļĒāđāļēāļāļāđāļāļ āđ āđāļāļĒāđāļāđāļāđāļāļāļĩāđāđāļŦāđāđāļĢāļēāđāļāđāļāļāļąāļŠāļāļĩāđāļāļģāļŠāļąāđāļ os.Create() āđāļāđāļāļāļģāļŠāļąāđāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļāļĨāđ āļāđāļēāļāđāļāđāļĢāļēāļŠāļēāļĄāļēāļĢāļāđāļŠāđāļāļ·āđāļāđāļāļĨāđāđāļĨāļ° path āļĨāļāđāļāđāļāđ āļŦāļĨāļąāļāļāļēāļāļāļąāđāļāļāđāļāļģāļāđāļēāđāļāđāļāđāļ§āđāđāļāļāļąāļ§āđāļāļĢāļāļĩāđāļāļ·āđāļāļ§āđāļē file āđāļāļāļąāļāļāđāļāļąāļ json.NewEncoder() āđāļāļ·āđāļāļāļģāļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠāļāđāļāļĄāļđāļĨāđāļŦāđāđāļāđāļ JSON āđāļĨāđāļ§āđāļāļĩāļĒāļāļĨāļāđāļāđāļāđāļāļĨāđāļāļąāđāļāđāļāļ
āļāļ·āđāļāđāļāļĨāđ : WriteJSON.go
package main
import (
"encoding/json"
"log"
"os"
)
type Ingredient struct {
Name string `json:"name"`
Quantity int `json:"quantity"`
Unit string `json:"unit"`
}
type Coffee struct {
Name string `json:"name"`
Description string `json:"description"`
Price float64 `json:"price"`
Ingredients []Ingredient `json:"ingredients"`
}
func main() {
// Define a slice of Coffee structs
coffees := []Coffee{
{
Name: "Americano",
Description: "A classic espresso drink",
Price: 2.50,
Ingredients: []Ingredient{
{Name: "Espresso", Quantity: 1, Unit: "shot"},
{Name: "Water", Quantity: 6, Unit: "oz"},
},
},
{
Name: "Latte",
Description: "Espresso with steamed milk",
Price: 4.00,
Ingredients: []Ingredient{
{Name: "Espresso", Quantity: 2, Unit: "shot"},
{Name: "Milk", Quantity: 8, Unit: "oz"},
},
},
}
// Open the file for writing
file, err := os.Create("coffe-new.json")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// Encode the coffee data as JSON and write it to the file
encoder := json.NewEncoder(file)
err = encoder.Encode(coffees)
if err != nil {
log.Fatal(err)
}
}
āđāļĄāļ·āđāļāđāļĢāļēāļĨāļāļāļāļģāļāļēāļĢāļĢāļąāļāļāđāļāļ°āđāļāđāđāļāļĨāđ coffee-new.json āļĄāļēāđāļĨāđāļ§āļ§āļ§āļ§
8. āļāļąāļ§āļāđāļ§āļĒāđāļāļāļēāļĢāđāļāļĨāļ JSON-to-Go
āļāļēāļāļāļēāļĢāļāļģāļāļąāļ§āļāļĒāđāļēāļāļāđāļēāļāļāļāļāļ°āđāļŦāđāļāļ§āđāļēāļŠāđāļ§āļāļāļĩāđāļāļĢāļŦāļ āļāđāļāļāļāļāļāļāļŦāļāđāļāļĒāļāļ°āđāļāđāļāļāļąāđāļāļāļāļāļāļĩāđāđāļĢāļēāļĄāļĩāļāđāļāļĄāļđāļĨ JSON āļāļĒāļđāđāđāļĨāđāļ§āļāđāļāļāļĄāļēāļāļąāđāļāđāļāļ° āđāļĒāļāļāđāļāļĄāļđāļĨāđāļāļ·āđāļāļĄāļēāđāļāļĩāļĒāļ struct āđāļāļāđāļāđāļĄāļąāđāļĒāļāļĢāļąāļ ? āļāļĄāļāļāđāļāļ°āļāļģāđāļ§āđāļ https://mholt.github.io/json-to-go/ āđāļāļēāđāļ§āđāļŠāļģāļŦāļĢāļąāļāļāļāļāļāļĩāđāđāļĢāļēāđāļāđāļāđāļāļĄāļđāļĨ JSON āļĄāļēāļāđāļāļāļāļķāļāđāļĢāļēāļāđāđāļĒāļāđāļāđāļēāđāļ§āđāļāļāļĩāđāđāļĨāđāļ§āđāļĢāļēāļāđāļāļ°āđāļāđ struct āļĄāļēāđāļĨāļĒ
āđāļĨāļ°āļāļĩāđāļāļ°āļāļĢāļąāļāļāđāđāļāđāļāđāļāļ·āđāļāļŦāļēāđāļĨāđāļ āđ āļāđāļāļĒ āđ āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāđ Go āļāļđāđāļāļąāļāļāđāļāļĄāļđāļĨāđāļāļ JSON āļāļąāđāļāđāļāļ āđāļĄāđāļĒāļēāļāđāļĨāļĒāđāļāđāļĄāļąāđāļĒāļāļĢāļąāļ āļŠāļģāļŦāļĢāļąāļāļāļāļāļĩāđ
āļĢāļ°āļāļāļāļķāļāļāļąāļāļĐāļ° āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ
āļāļĩāđāļāļĢāđāļāļĄāļāļĢāļ§āļāļāļĨāļāļēāļāļāļļāļ 24 āļāļąāđāļ§āđāļĄāļ
- āđāļāļāļĒāđāļāļąāļāļŦāļēāļāļ§āđāļē 200 āļāđāļ āļāļĩāđāļĢāļāļāđāļēāļāļēāļĒāļāļļāļāļāļĒāļđāđ
- āļĢāļāļāļĢāļąāļ 9 āļ āļēāļĐāļēāđāļāļĢāđāļāļĢāļĄāļŦāļĨāļąāļ āđāļĄāđāļ§āđāļēāļāļ° Java, Python, C āļāđāđāļāļĩāļĒāļāđāļāđ
- āđāļāđāļāļēāļāđāļāđāļāļĢāļĩ ! āļāļĢāļ 20 āļāđāļāļāļķāđāļāđāļ āļĢāļąāļ Certificate āđāļāđāļĨāļĒ !!