Skip to main content
0

āļŠāļĢāļļāļ›āļŠāļąāđ‰āļ™ āđ†

āļŠāļ§āļąāļŠāļ”āļĩāļ„āļĢāļąāļš ! āđƒāļ™āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āđ€āļĢāļēāļˆāļ°āļĄāļēāļ—āļģāļ„āļ§āļēāļĄāļĢāļđāđ‰āļˆāļąāļāļāļąāļš 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 āļ™āļąāđˆāļ™āđ€āļ­āļ‡ āđ„āļĄāđˆāļĒāļēāļāđ€āļĨāļĒāđƒāļŠāđˆāļĄāļąāđ‰āļĒāļ„āļĢāļąāļš āļŠāļģāļŦāļĢāļąāļšāļšāļ—āļ™āļĩāđ‰

āļŦāļēāļāđƒāļ„āļĢāļĄāļĩāļ›āļąāļāļŦāļēāļ•āļīāļ”āļ•āļĢāļ‡āđ„āļŦāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ­āļšāļ–āļēāļĄāđ„āļ”āđ‰āđ€āļĨāļĒāļ—āļĩāđˆ BorntoDev Discord Community 😊 : https://discord.com/invite/wam6MYrfND

āļĢāļ°āļšāļšāļāļķāļāļ—āļąāļāļĐāļ° āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ

āļ—āļĩāđˆāļžāļĢāđ‰āļ­āļĄāļ•āļĢāļ§āļˆāļœāļĨāļ‡āļēāļ™āļ„āļļāļ“ 24 āļŠāļąāđˆāļ§āđ‚āļĄāļ‡

  • āđ‚āļˆāļ—āļĒāđŒāļ›āļąāļāļŦāļēāļāļ§āđˆāļē 200 āļ‚āđ‰āļ­ āļ—āļĩāđˆāļĢāļ­āļ—āđ‰āļēāļ—āļēāļĒāļ„āļļāļ“āļ­āļĒāļđāđˆ
  • āļĢāļ­āļ‡āļĢāļąāļš 9 āļ āļēāļĐāļēāđ‚āļ›āļĢāđāļāļĢāļĄāļŦāļĨāļąāļ āđ„āļĄāđˆāļ§āđˆāļēāļˆāļ° Java, Python, C āļāđ‡āđ€āļ‚āļĩāļĒāļ™āđ„āļ”āđ‰
  • āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļŸāļĢāļĩ ! āļ„āļĢāļš 20 āļ‚āđ‰āļ­āļ‚āļķāđ‰āļ™āđ„āļ› āļĢāļąāļš Certificate āđ„āļ›āđ€āļĨāļĒ !!
āđ€āļ‚āđ‰āļēāđƒāļŠāđ‰āļ‡āļēāļ™āļĢāļ°āļšāļš DevLab āļŸāļĢāļĩ !āđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ

āđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ„āļ­āļ—āļĩ “āļ­āļąāļžāļŠāļāļīāļĨāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ” āļˆāļēāļāļ•āļąāļ§āļˆāļĢāļīāļ‡
āļ›āļąāđ‰āļ™āđƒāļŦāđ‰āļ„āļļāļ“āđ€āļ›āđ‡āļ™ āļ„āļ™āļŠāļēāļĒāđ„āļ­āļ—āļĩāļĢāļ°āļ”āļąāļšāļĄāļ·āļ­āļ­āļēāļŠāļĩāļž

BorntoDev

Author BorntoDev

BorntoDev Co., Ltd.

More posts by BorntoDev
Close Menu

āđ€āļĢāļēāđƒāļŠāđ‰āļ„āļļāļāļāļĩāđ‰āđ€āļžāļ·āđˆāļ­āļžāļąāļ’āļ™āļēāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āđāļĨāļ°āļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāļ—āļĩāđˆāļ”āļĩāđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ‚āļ­āļ‡āļ„āļļāļ“ āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļĻāļķāļāļĐāļēāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āđ„āļ”āđ‰āļ—āļĩāđˆ āļ™āđ‚āļĒāļšāļēāļĒāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§ āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§āđ€āļ­āļ‡āđ„āļ”āđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āđ„āļ”āđ‰āđ€āļ­āļ‡āđ‚āļ”āļĒāļ„āļĨāļīāļāļ—āļĩāđˆ āļ•āļąāđ‰āļ‡āļ„āđˆāļē

āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§

āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ„āļļāļāļāļĩāđ‰āđ‚āļ”āļĒāđ€āļ›āļīāļ”/āļ›āļīāļ” āļ„āļļāļāļāļĩāđ‰āđƒāļ™āđāļ•āđˆāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—āđ„āļ”āđ‰āļ•āļēāļĄāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ āļĒāļāđ€āļ§āđ‰āļ™ āļ„āļļāļāļāļĩāđ‰āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™

āļĒāļ­āļĄāļĢāļąāļšāļ—āļąāđ‰āļ‡āļŦāļĄāļ”
āļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§
  • āļ„āļļāļāļāļĩāđ‰āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™
    āđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™āļ•āļĨāļ­āļ”

    āļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ„āļļāļāļāļĩāđ‰āļĄāļĩāļ„āļ§āļēāļĄāļˆāļģāđ€āļ›āđ‡āļ™āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒ āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ›āđ‡āļ™āļ›āļāļ•āļī āđāļĨāļ°āđ€āļ‚āđ‰āļēāļŠāļĄāđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒ āļ„āļļāļ“āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ›āļīāļ”āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āļ„āļļāļāļāļĩāđ‰āļ™āļĩāđ‰āđƒāļ™āļĢāļ°āļšāļšāđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ‚āļ­āļ‡āđ€āļĢāļēāđ„āļ”āđ‰
    āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ„āļļāļāļāļĩāđ‰

  • āļ„āļļāļāļāļĩāđ‰āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ—āļēāļ‡āļāļēāļĢāļ•āļĨāļēāļ”

    āļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ„āļļāļāļāļĩāđ‰āļ—āļĩāđˆāļĄāļĩāļ„āļ§āļēāļĄāļˆāļģāđ€āļ›āđ‡āļ™āđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđ€āļžāļ·āđˆāļ­āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒ āđāļĨāļ° āļ™āļģāđ€āļŠāļ™āļ­āđ‚āļ›āļĢāđ‚āļĄāļŠāļąāļ™ āļŠāļīāļ™āļ„āđ‰āļē āļĢāļ§āļĄāļ–āļķāļ‡āļŦāļĨāļąāļāļŠāļđāļ•āļĢāļŸāļĢāļĩ āđāļĨāļ° āļŠāļīāļ—āļ˜āļīāļžāļīāđ€āļĻāļĐāļ•āđˆāļēāļ‡ āđ† āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāļ›āļīāļ”āļ„āļļāļāļāļĩāđ‰āļ›āļĢāļ°āđ€āļ āļ—āļ™āļĩāđ‰āđ„āļ”āđ‰āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāđˆāļ‡āļœāļĨāļ•āđˆāļ­āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļŦāļĨāļąāļ āđ€āļ§āđ‰āļ™āđāļ•āđˆāļāļēāļĢāļ™āļģāđ€āļŠāļ™āļ­āđ‚āļ›āļĢāđ‚āļĄāļŠāļąāļ™āļ—āļĩāđˆāļ­āļēāļˆāđ„āļĄāđˆāļ•āļĢāļ‡āļāļąāļšāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ
    āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ„āļļāļāļāļĩāđ‰

āļšāļąāļ™āļ—āļķāļāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē