Vivasoft-logo

[ā§Ģ.⧍] āĻĄāĻžāϟāĻž āĻĒāĻžāĻ°ā§āϏāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāύāĻŋāĻĒ⧁āϞ⧇āĻļāύ (Data parsing & manipulation)

[ā§Ģ.⧍.ā§§] JSON

JSON āĻāϰ āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ āĻšāϞ⧋ JavaScript Object Notation, āϝ⧇āϟāĻž āĻāĻ•āϟāĻŋ āĻŦāĻšā§āϞ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻĄāĻžāϟāĻž āχāĻ¨ā§āϟāĻžāϰāĻšā§‡āĻžā§āϜ – āĻĢāϰāĻŽā§āϝāĻžāϟ. āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻāĻŦāĻ‚ API āĻĄā§‡āĻ­āϞāĻĒāĻžāϰāϰāĻž āĻ­āĻŋāĻ¨ā§āύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻāĻŦāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻāϰ āĻŽāĻžāĻā§‡ JSON āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āĻĄāĻžāϟāĻž āĻāĻ•ā§āϏāĻšā§‡āĻžā§āϜ āĻ•āϰ⧇, āϕ⧇āύāύāĻž JSON āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āĻĄāĻžāϟāĻž āĻāĻ•ā§āϏāĻšā§‡āĻžā§āϜ āĻ•āϰāĻž āϖ⧁āĻŦāχ āϏāĻšāϜāĨ¤Â 

JSON āĻĄāĻžāϟāĻž āύāĻŋāϝāĻŧ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ Go āĻāϰ “encoding/json” āĻĒā§āϝāĻžāϕ⧇āĻœā§‡āϰ āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁ āĻŦāĻŋāĻ˛ā§āϟ-āχāύ āĻĢāĻžāĻ‚āĻļāύ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

  1. json.marshal(): 

āϝ⧇ āϕ⧋āύ āĻĄāĻžāϟāĻž āϟāĻžāχāĻĒ āĻāϰ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āϕ⧇ āĻœā§‡āϏāύ āĻĢāϰāĻŽā§āϝāĻžāϟ āĻ āĻāύāϕ⧋āĻĄ āĻ•āϰ⧇ –

				
					 // Boolean values encode as JSON booleans
   var boolean = true
   bolB, _ := json.Marshal(boolean)
   for i := range bolB {
       fmt.Print(string(bolB[i]))
   }

				
			

āφāωāϟāĻĒ⧁āϟ:

				
					   true
				
			

āĻāχ āϕ⧋āĻĄ āĻĨ⧇āϕ⧇ āĻŦā§‹āĻāĻž āϝāĻžāĻšā§āϛ⧇ āϝ⧇, boolean āĻ­ā§āϝāĻžāϞ⧁āϟāĻŋāϕ⧇ āϕ⧇ json.Marshal() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻŽāϰāĻž byte āϟāĻžāχāĻĒ⧇āϰ āĻ…ā§āϝāĻžāϰ⧇āϤ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻ›āĻŋ, āϝ⧇āϟāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āϟāϕ⧇ āφāĻŽāϰāĻžÂ  string āĻ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āĻĒāϰāĻĒāϰ āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰāϗ⧁āϞ⧋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻšā§āĻ›āĻŋāĨ¤ āĻŽā§‚āϞāϤāσ āĻāĻ–āĻžāύ⧇, boolean āĻ­ā§āϝāĻžāϞ⧁ true āĻĨ⧇āϕ⧇ string āĻ­ā§āϝāĻžāϞ⧁ “true” āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤

āĻāϰāĻ•āĻŽ āĻ­āĻžāĻŦ⧇ āφāĻŽāϰāĻž int, āĻĢā§āϞ⧋āϟ, string āϟāĻžāχāĻĒ⧇āϰ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞāϕ⧇ []byte āĻ convert āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ, āϝ⧇āϟāĻžāϕ⧇ āĻŦā§‹āĻāĻžāϰ āϜāĻ¨ā§āϝ āĻŽā§‚āϞāϤāσ string āĻ convert āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤

				
					 intB, _ := json.Marshal(1)
   fmt.Println(string(intB))
   fltB, _ := json.Marshal(2.34)
   fmt.Println(string(fltB))
   strB, _ := json.Marshal("Gopher")
   fmt.Println(string(strB))

				
			

āφāωāϟāĻĒ⧁āϟ:

				
					   1
   2.34
   "Gopher"
				
			

āĻāĻ–āĻžāύ⧇āϰ āϏāĻŦ āϗ⧁āϞāĻž āωāĻĻāĻžāĻšāϰāϪ⧇ Marshal() āĻĢāĻžāĻ‚āĻļāύ āϟāĻž JSON āĻ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ byte āĻ…ā§āϝāĻžāϰ⧇ āĻĻāĻŋāĻŦ⧇, āύāϤ⧁āĻŦāĻž āĻāϰāϰ āĻĻāĻŋāĻŦ⧇ (āĻāĻ–āĻžāύ⧇ āωāĻĻāĻžāĻšāϰāϪ⧇āϰ āϏ⧁āĻŦāĻŋāϧāĻžāĻ°ā§āĻĨ⧇, ‘_’ āĻĻāĻŋā§Ÿā§‡ āϤāĻž ignore āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻœā§€āĻŦāύ⧇ āϝ⧇āϕ⧋āύ⧋ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻ•āϰāϤ⧇ āϗ⧇āϞ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻāχ āĻāϰāϰāϗ⧁āϞ⧋ āĻšā§‡āĻ• āĻ•āϰāĻž āϞāĻžāĻ—āĻŦ⧇āĨ¤Â 

āϕ⧋āύ⧋ āĻ…ā§āϝāĻžāϰ⧇āϕ⧇āĻ“ āφāĻŽāϰāĻž JSON āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āύāĻŋā§Ÿā§‡ āϝ⧇āϤ⧇ āĻĒāĻžāϰāĻŋ –

				
					  slcD := []string{"apple", "peach", "pear"}
   fmt.Println("before:", slcD)
   slcB, _ := json.Marshal(slcD)
   fmt.Println("after:",string(slcB))
				
			

āĻāϰ āφāωāϟāĻĒ⧁āϟ –

				
					before: [apple peach pear]
   after: ["apple","peach","pear"]

				
			

āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāϰāĻž āϝāĻĻāĻŋ JSON āĻāϰ āĻ•āĻŋ-āĻ­ā§āϝāĻžāϞ⧁ āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āĻĒ⧇āϤ⧇ āϚāĻžāχ, āϤāĻžāĻšāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϞāĻžāĻ—āĻŦ⧇ map/struct –

				
					   mapD := map[string]int{"apple": 5, "lettuce": 7}
   mapB, _ := json.Marshal(mapD)
   fmt.Println(string(mapB))
				
			

āĻāχ āϕ⧋āĻĄā§‡āϰ āφāωāϟāĻĒ⧁āϟ –

				
					{"apple":5,"lettuce":7}
				
			

āĻāĻ–āĻžāύ⧇ Map āĻāϰ āĻ­āĻŋāϤāϰ⧇āϰ āϏāĻŦ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āĻāĻ•āχ āĻĄāĻžāϟāĻž āϟāĻžāχāĻĒ⧇āϰāĨ¤ āφāĻŽāϰāĻž āϝāĻĻāĻŋ āĻāĻŽāύ JSON āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϚāĻžāχ āϝ⧇āĻ–āĻžāύ⧇ āĻāϕ⧇āĻ• āĻĢāĻŋāĻ˛ā§āĻĄ āĻāϕ⧇āĻ• āϟāĻžāχāĻĒ⧇āϰ, āϤāĻžāĻšāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ Struct āχāωāϜ āĻ•āϰāĻž āϞāĻžāĻ—āĻŦ⧇(āĻ…āĻĨāĻŦāĻž map āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ āĻšāĻŋāϏ⧇āĻŦ⧇ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇)āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡Â  āĻāĻ•āϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāώ⧟ āĻšāϞ⧋āσ Struct āĻāϰ field āϗ⧁āϞ⧋āϰ āύāĻžāĻŽ āĻ…āĻŦāĻļā§āϝāχ āĻŦ⧜ āĻšāĻžāϤ⧇āϰ āĻ…āĻ•ā§āώāϰ āĻĻāĻŋā§Ÿā§‡ āĻļ⧁āϰ⧁ āĻšāϤ⧇ āĻšāĻŦ⧇ āϝāĻĻāĻŋ āϏ⧇āϗ⧁āϞ⧋ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āĻŸā§‡āĻŦāϞ āĻ•āϰāϤ⧇ āϚāĻžāχāĨ¤– 

				
					 type response1 struct {
       Page   int
       Fruits []string
   }
   res1D := &response1{
       Page:   1,
       Fruits: []string{"apple", "peach", "pear"},
   }
   res1B, _ := json.Marshal(res1D)
   fmt.Println(string(res1B))



				
			

āφāωāϟāĻĒ⧁āϟ –

				
					{"Page":1,"Fruits":["apple","peach","pear"]}

				
			

āφāĻŽāϰāĻž āϚāĻžāχāϞ⧇, JSON  āĻāϰ key āϗ⧁āϞ⧋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻ•āϰ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰāĻŋ, āĻāϰ āϜāĻ¨ā§āϝ Struct āĻāϰ āĻĢāĻŋāĻ˛ā§āĻĄ āϗ⧁āϞ⧋āϰ āĻĒāĻžāĻļ⧇ JSON āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ key āĻāϰ āύāĻžāĻŽ āĻ•āĻŋ āĻšāĻŦ⧇ āϤāĻž “json” āĻŸā§āϝāĻžāĻ— āĻĻāĻŋā§Ÿā§‡ āĻŦāϞ⧇ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄāϟāĻŋ āĻ–ā§‡ā§ŸāĻžāϞ āĻ•āϰāĻŋ –

				
					 type response2 struct {
       Page   int      `json:"page-number"`
       Fruits []string `json:"fruits-List"`
   }
   res1D := &response2{
       Page:   1,
       Fruits: []string{"apple", "peach", "pear"},
   }


   res1B, _ := json.Marshal(res1D)
   fmt.Println(string(res1B))

				
			

JSON āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡āϰ key āϗ⧁āϞ⧋ āĻ–ā§‡ā§ŸāĻžāϞ āĻ•āϰāĻŋ –

				
					{"page-number":1,"fruits-List":["apple","peach","pear"]}
				
			
  1. json.Unmarshal(): 

āĻāϟāĻž āĻŽā§‚āϞāϤ JSON āĻĄāĻžāϟāĻž āĻĄāĻŋāϕ⧋āĻĄ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§Ÿ, āĻ•āĻŋāϛ⧁ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āύāĻŋ⧟āĻŽāϏāĻš, āĻāϟāĻŋ Marshal() āĻāϰ āĻ āĻŋāĻ• āωāĻ˛ā§āĻŸā§‹āĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āϝ⧇ āϕ⧋āύ āĻāĻ•āϟāĻž āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āĻŦāϞ⧇ āĻĻāĻŋāϤ⧇ āĻšā§Ÿ, āϝ⧇āĻ–āĻžāύ⧇ āφāĻŽāϰāĻž āĻĄāĻŋāϕ⧋āĻĄā§‡āĻĄ JSON āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϕ⧇ āϰāĻžāĻ–āĻŦāĨ¤

Syntax – 

				
					  func Unmarshal(data []byte, v any) error
				
			

āϝāĻĻāĻŋ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ null āĻšā§Ÿ, āϤāĻžāĻšāϞ⧇ InvalidUnmarshalError āĻĻāĻŋāĻŦ⧇āĨ¤Â Â 

āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄāϟāĻž āĻ–ā§‡ā§ŸāĻžāϞ āĻ•āϰāĻŋ –

				
					 byt := []byte(
       `
       {
           "num":6.13,
           "strs":["a","b"]
       }
       `,
   )
   var v map[string]interface{}
   if err := json.Unmarshal(byt, &v); err != nil {
       panic(err)
   }
   fmt.Println(v)

				
			

āĻāĻ–āĻžāύ⧇ āφāĻŽāϰāĻž āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ JSON āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϕ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻŋ Map āĻ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āϚāĻžāχ, āϝ⧇āĻ–āĻžāύ⧇ key āϗ⧁āϞ⧋ āĻšāĻŦ⧇ string āĻāĻŦāĻ‚ key āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ āϝ⧇āϕ⧋āύ⧋ āĻ•āĻŋāϛ⧁āχ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āφāωāϟāĻĒ⧁āϟ:

				
					   map[num:6.13 strs:[a b]]
				
			

āϤāĻŦ⧇ āĻāχ āĻĒāĻĻā§āĻŦāϤāĻŋāϰ āĻāĻ•āϟāĻŋ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ⧋, āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ Map āĻāϰ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞ⧋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟāĻžāχāĻĒ āĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ āĻ•āϰ⧇ āύāĻŋāϤ⧇ āĻšāĻŦ⧇, (āϕ⧇āύāύāĻž āφāĻŽāϰāĻž āĻ­ā§āϝāĻžāϞ⧁ āϗ⧁āϞāĻž interface{} āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋā§Ÿā§‡āĻ›āĻŋ)āĨ¤ āĻāϟāĻžāϰ āϜāĻ¨ā§āϝ āϝāĻĻāĻŋ āϕ⧋āύ āϭ⧁āϞ āĻšā§Ÿ āϤāĻžāĻšāϞ⧇ āϰāĻžāύāϟāĻžāχāĻŽ āĻāϰāϰ āĻšāĻŦ⧇, āϝ⧇āϟāĻž āϚāĻŋāĻšā§āύāĻŋāϤ āĻ•āϰāĻž āϖ⧁āĻŦāχ āĻāĻžāĻŽā§‡āϞāĻžāϰ āĻŦāĻŋāώ⧟āĨ¤ āϤāĻžāχ āφāĻŽāϰāĻž āϝāĻĻāĻŋ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ, āĻĄāĻŋāϕ⧋āĻĄā§‡āĻĄ JSON āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻāϰ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋āϰ āĻ­ā§āϝāĻžāϞ⧁ āĻ•āĻŋ āϟāĻžāχāĻĒ āĻšāĻŦ⧇, āϤāĻž āĻ āĻŋāĻ• āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āϚāĻžāχ, āϤāĻžāĻšāϞ⧇ āφāĻŽāϰāĻž Struct āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ –

				
					 type response2 struct {
       Page   int      `json:"page-number"`
       Fruits []string `json:"fruits-List"`
   }
   str := `
   {
       "number": 1,
       "fruits-List": ["apple", "peach"]
   }`
   res := response2{}
   json.Unmarshal([]byte(str), &res)
   fmt.Println(res)
   fmt.Println(res.Fruits[0])

				
			

āφāωāϟāĻĒ⧁āϟ – 

				
					 {0 [apple peach]}
   apple

				
			

āĻāχ āĻĒāĻĻā§āĻŦāϤāĻŋāϰ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧜ āϏ⧁āĻŦāĻŋāϧāĻž āĻšāϞ⧋; type-safety āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āϟāĻžāχāĻĒ āĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ āύāĻž āĻ•āϰāĻžāĨ¤Â 

json.valid(): 

āϝ⧇āĻ–āĻžāύ⧇ āφāĻŽāϰāĻž āĻ¸ā§āϞāĻžāχāϏ / map / āĻšā§āϝāĻžāύ⧇āϞ āύāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰāĻ›āĻŋāĨ¤

āĻļ⧁āϰ⧁āϤ⧇ āϕ⧋āύ⧋ āĻ­ā§āϝāĻžāϞ⧁ āĻĻāĻŋā§Ÿā§‡ āĻāĻĻ⧇āϰāϕ⧇ āχāύāĻŋāĻļāĻŋ⧟āĻžāϞāĻžāχāϜ āĻ•āϰ⧇ āύāĻŋāĻŦā§‹ (āύāϤ⧁āĻŦāĻž nil / zero āĻĻāĻŋā§Ÿā§‡ āχāύāĻŋāĻļāĻŋ⧟āĻžāϞāĻžāχāϜ āĻšāĻŦ⧇)

āĻļ⧁āϰ⧁āϤ⧇ āĻāĻĻ⧇āϰ āϏāĻžāχāϜ, āĻ•ā§āϝāĻžāĻĒāĻžāϏāĻŋāϟāĻŋ āĻ•āϤ āĻšāĻŦ⧇ āϤāĻž āφāĻŽāϰāĻž āϜāĻžāύāϞ⧇āĻ“, āĻĒāϰ⧇ āϤāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ (āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻāĻĻ⧇āϰ āϏāĻžāχāϜ, āĻ•ā§āϝāĻžāĻĒāĻžāϏāĻŋāϟāĻŋ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ•ā§āϝāĻžāϞāĻŋ āĻĒāϰāĻŋāĻ°ā§āϤāύ āĻšāĻŦ⧇)

āĻāϰāĻ•āĻŽ āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§ŸāĻāχ āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻŽāϰāĻž āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ , āϕ⧋āύ []byte (āĻŦāĻžāχāϟ āĻ¸ā§āϞāĻžāχāϏ) āĻ­ā§āϝāĻžāϞāĻŋāĻĄ JSON āĻĄāĻžāϟāĻž āĻ•āĻŋ-āύāĻžāĨ¤ unmarshal() āĻ•āϰāĻžāϰ āφāϗ⧇ āĻāχ āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāϗ⧇āχ āĻāϰāϰ āĻšā§‡āĻ• āĻ•āϰāĻž āĻšā§Ÿ.

āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄāϟāĻŋ āĻ–ā§‡ā§ŸāĻžāϞ āĻ•āϰāĻŋ – 

				
					 type response2 struct {
       Page   int      `json:"page-number"`
       Fruits []string `json:"fruits-List"`
   }
  
   str := `
   {
       "number": 1 "fruits-List": ["apple", "peach"]
   }`
   if json.Valid([]byte(str)) {
       res := response2{}
       json.Unmarshal([]byte(str), &res)
       fmt.Println(res)
       fmt.Println(res.Fruits[0])
   } else{
       fmt.Println("wrong JSON response")
   }

				
			

āφāωāϟāĻĒ⧁āϟ –  

				
					 wrong JSON response
				
			

4.json.NewEncoder(): 

āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ JSON encoding āĻ•āϰāĻž āϝāĻžā§Ÿ āĻāĻŦāĻ‚ āĻāϰ āϏ⧁āĻŦāĻŋāϧāĻž āĻšāϞ⧋ āφāĻŽāϰāĻž āĻāĻ•āχ āϏāĻžāĻĨ⧇ JSON āĻ encode, āφāωāϟāĻĒ⧁āϟ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻāĻŦāĻ‚Â  āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻ›āĻŋ  – 

				
					  package main

   import (
       "encoding/json"
       "os"
   )

   type Person struct {
       Name string
       Age  int
   }

   func main() {
       person := Person{Name: "John", Age: 30}
       file, err := os.Create("person.json")
       if err != nil {
           panic(err)
       }
       defer file.Close()
       encoder := json.NewEncoder(file)
       err = encoder.Encode(person)
       if err != nil {
           panic(err)
       }
   }

				
			

āφāωāϟāĻĒ⧁āϟ person.json āĻĢāĻžāχāϞ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžāĻŦā§‡Â  –

				
					   {"Name":"John","Age":30}

				
			

āφāϰ⧋ āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁ āĻĢāĻžāĻ‚āĻļāύ āĻ°ā§Ÿā§‡āϛ⧇āσ āĻāϰ āĻŽāĻ§ā§āϝ⧇ json.NewDecoder() āĻšāϞ⧋ json.NewEncoder() āĻāϰ āĻ āĻŋāĻ• āωāĻ˛ā§āĻŸā§‹, āϝ⧇āϟāĻž json.NewDecoder() āχāύāĻĒ⧁āϟ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĨ⧇āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ JSON āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āχāύāĻĒ⧁āϟ āĻ¨ā§‡ā§ŸāĨ¤Â 

[ā§Ģ.⧍.⧍] Data Serialization

Data Serialization āĻšāϞ⧋ āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāĻ°ā§āĻĄ āĻĄāĻžāϟāĻž āϕ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻž āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž, āϝ⧇āϟāĻžāϕ⧇ āύ⧇āϟāĻ“ā§ŸāĻžāĻ°ā§āϕ⧇ āĻŸā§āϰāĻžāĻ¨ā§āϏāĻŽāĻŋāϟ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āĻ…āĻĨāĻŦāĻž Disk āĻ āϏ⧇āχāĻ­ āĻ•āϰ⧇ āϰāĻžāĻ–āĻž āϝāĻžāĻŦ⧇, āϝāĻžāϤ⧇ āĻĒāϰ⧇ āĻāχ āĻĄāĻžāϟāĻž āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤Â Â 

Go āϤ⧇ Data Serialization āĻāϰ āϜāĻ¨ā§āϝ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧇āĻļāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻŸā§‡āĻ•āύāĻŋāĻ• āĻšāϞ⧋ JSON āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āĻ¨ā§‡ā§ŸāĻž, āϝ⧇āϟāĻž āφāĻŽāϰāĻž āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻļāĻŋāϖ⧇āĻ›āĻŋāĨ¤Â 

āĻāĻ–āĻžāĻ¨ā§‡Â  āĻ–ā§‡ā§ŸāĻžāϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝ⧇, āĻĒā§āϰāĻžā§ŸāĻļāσ JSON āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡āϰ key āĻāĻŦāĻ‚ Struct āĻāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĢāĻŋāĻ˛ā§āĻĄ āϗ⧁āϞ⧋ āĻāĻ•āχ āύāĻžāĻŽā§‡āϰ āĻšā§Ÿ āύāĻž, āϤāĻžāĻ‡Â  Struct āĻāϰ āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāϜāĻĄ “json” āĻŸā§āϝāĻžāĻ— āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄāϟāĻŋ āĻ–ā§‡ā§ŸāĻžāϞ āĻ•āϰāĻŋ –

				
					  type response2 struct {
       Page   int      `json:"pageNumber"`
       Fruits []string `json:"fruits-List"`
   }

   jsonStr := `
   {
   "page-number": 1,
   "fruits-List": ["apple", "peach"]
   }`
   res := response2{}
   json.Unmarshal([]byte(jsonStr), &res)
   fmt.Println(res)

				
			

āφāωāϟāĻĒ⧁āϟ – 

				
					   {0 [apple peach]}
				
			

āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻŽāϰāĻž āϝ⧇ āĻœā§‡āϏāύ āĻĄāĻžāϟāĻž “jsonStr” āϰāĻŋāϏāĻŋāĻ­ āĻ•āϰ⧇, āĻāύāϕ⧋āĻĄ āĻ•āϰāϤ⧇ āϚāĻžāĻšā§āĻ›āĻŋ, āϤāĻžāϰ āĻāĻ•āϟāĻžÂ  key (“page-number”), response2 Struct āĻāϰ Page āĻĢāĻŋāĻ˛ā§āĻĄā§‡āĻ°Â  āĻœā§‡āϏāύ āĻŸā§āϝāĻžāĻ— (pageNumber) āĻāĻ°Â  āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞ⧇ āύāĻŋāĨ¤ āĻāϰ āĻĢāϞ⧇ āφāĻŽāϰāĻž āϝāĻ–āĻ¨Â  jsonStr āϕ⧇ āĻāύāϕ⧋āĻĄ āĻ•āϰ⧇ response2 Struct āĻ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰ⧇ āϰāĻžāĻ–āϤ⧇ āϚāĻžāĻšā§āĻ›āĻŋ, āĻ“āχ āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻ­ā§āϝāĻžāϞ⧁ null āĻšā§Ÿā§‡ āϝāĻžāĻšā§āϛ⧇ (āϕ⧋āύ error āĻĒāĻžāχāύāĻŋ āĻ•āĻŋāĻ¨ā§āϤ⧁!!) āĨ¤ āϤāĻžāχ, Struct āĻāϰ “json” āĻŸā§āϝāĻžāĻ— āĻĻā§‡ā§ŸāĻžāϰ āϏāĻŽā§Ÿ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻžā§œāϤāĻŋ āϏāϤāĻ°ā§āĻ•āϤāĻž āĻ…āĻŦāϞāĻŽā§āĻŦāύ āĻ•āϰāĻž āϞāĻžāĻ—āĻŦ⧇, āϝ⧇āύ JSON āĻāϰ key āĻāĻŦāĻ‚Â  Struct āĻāϰ āĻāĻ•āχ āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ “json” āĻŸā§āϝāĻžāĻ— āĻāĻ•āχ āĻšā§ŸāĨ¤

[ā§Ģ.⧍.ā§Š] āϟāĻžāχāĻĒ āĻ•āύāĻ­āĻžāĻ°ā§āĻļāύ

āĻāĻ• āϟāĻžāχāĻĒ⧇āϰ āĻĄāĻžāϟāĻž āϕ⧇ āĻ…āĻ¨ā§āϝ āϟāĻžāχāĻĒ⧇āϰ āĻĄāĻžāϟāĻž āϤ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϕ⧇ āĻŦāϞ⧇ āϟāĻžāχāĻĒ āĻ•āύāĻ­āĻžāĻ°ā§āĻļāύ. Go āϤ⧇ āĻāĻ• āϟāĻžāχāĻĒ⧇āϰ āĻĄāĻžāϟāĻž āϕ⧇ āĻ…āĻ¨ā§āϝ āϟāĻžāχāĻĒ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϖ⧁āĻŦāχ āϏāĻšāϜ –

				
					  var iNum int = 10
   var fNum float64 = float64(iNum)
   fmt.Printf("value = %v | type - %T\n", fNum, fNum)
   var fNum2 = 5.65
   iNum2 := int(fNum2)
   fmt.Printf("value = %v | type - %T\n", iNum2, iNum2)

				
			

āφāωāϟāĻĒ⧁āϟ –

				
					   value = 10 | type - float64
   value = 5 | type - int
				
			

āĻāχ āϕ⧋āĻĄ āĻĻ⧇āϖ⧇ āϖ⧁āĻŦ āϏāĻšāĻœā§‡āχ āĻŦā§‹āĻāĻž āϝāĻžāĻšā§āϛ⧇ āϝ⧇, āφāĻŽāϰāĻž āϝāĻĻāĻŋ V āϟāĻžāχāĻĒ⧇āϰ āĻĄāĻžāϟāĻž āϕ⧇ T āϟāĻžāχāĻĒ⧇āϰ āĻĄāĻžāϟāĻžāϤ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āϚāĻžāχ, āϤāĻžāĻšāϞ⧇ āφāĻŽāϰāĻž T(V) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦā§‹āĨ¤Â 

āϤāĻŦ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻ•āĻŋāϛ⧁ āύāĻŋ⧟āĻŽ āĻŽā§‡āύ⧇ āĻ•āϰāĻž āϞāĻžāĻ—āĻŦ⧇, string āϟāĻžāχāĻĒ⧇āϰ āĻĄāĻžāϟāĻž āϕ⧇ āϤ⧋ āφāϰ āχāĻ¨ā§āϟāĻŋāϜāĻžāϰ / āĻĢā§āϞ⧋āϟ āĻ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āϚāĻžāĻ“ā§ŸāĻž āωāϚāĻŋāϤ āύāĻžāĨ¤

				
					  var str string = "string value"
   iNum2 := int(str)
				
			

āĻāχ āĻ…āĻĻā§āϭ⧁āϤ āϚāĻžāĻ“ā§ŸāĻžāϰ āĻĢāϞāĻžāĻĢāϞ āĻšāĻžāϤ⧇-āύāĻžāϤ⧇ –

				
					   # command-line-arguments
   ./type_conv.go:8:15: cannot convert str (variable of type string) to type int
				
			

āĻ—āĻžāĻŖāĻŋāϤāĻŋāĻ• āĻšāĻŋāϏāĻžāĻŦ āύāĻŋāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ āφāĻŽāĻžāĻĻ⧇āϰ āĻāχ āϟāĻžāχāĻĒ āĻ•āύāĻ­āĻžāĻ°ā§āĻļāύ āϗ⧁āϞ⧋ āĻ–ā§‡ā§ŸāĻžāϞ āϰ⧇āϖ⧇ āĻ•āϰāĻž āϞāĻžāĻ—āĻŦ⧇āĨ¤Â 

āϧāϰāĻŋ, āφāĻŽāϰāĻž āϚāĻžāĻšā§āĻ›āĻŋ ⧍ āϟāĻŋ āϏāĻ‚āĻ–ā§āϝāĻž āϝ⧋āĻ— āĻ•āϰāĻŦā§‹, āϝ⧇āĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ interger, āφāϰ⧇āĻ•āϟāĻŋ āĻĢā§āϞ⧋āϟ. āϤāĻ–āύ āĻ…āĻŦāĻļā§āϝāχ āĻāĻĻ⧇āϰāϕ⧇ āĻāĻ•āχ āϟāĻžāχāĻĒ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āϝ⧋āĻ— āĻ•āϰāĻž āϞāĻžāĻ—āĻŦ⧇, āύāĻžāĻšāϞ⧇ error āφāϏāĻŦ⧇

				
					

   var num1 float64 = 10.5
   var num2 int = 5
   result := num1 + num2
   fmt.Println("result = ", result)
				
			

āφāωāϟāĻĒ⧁āϟ – 

				
					 # command-line-arguments
   ./type_conv.go:20:12: invalid operation: num1 + num2 (mismatched types float64 and int)
				
			

āĻ¸ā§āĻĒāĻˇā§āϟāϤāχ, āĻĻ⧇āĻ–āĻž āϝāĻžāĻšā§āϛ⧇,āφāĻŽāĻžāĻĻ⧇āϰ āϝ⧋āĻ— āĻ…āĻĒāĻžāϰ⧇āĻļāĻ¨ā§‡Â  āϭ⧁āϞ āĻšā§Ÿā§‡āϛ⧇āĨ¤Â 

āϏāĻ āĻŋāĻ• āĻ­āĻžāĻŦ⧇ āĻ•āϰāϞ⧇ āĻšāĻŦ⧇ āύāĻŋāĻšā§‡āϰ āĻŽāϤ⧋ –

				
					   var num1 float64 = 10.5
   var num2 int = 5
   result := float64(num1) + float64(num2)
   fmt.Println("result = ", result)
				
			

āĻāĻ–āĻžāύ⧇ ⧍ āϟāĻž āύāĻžāĻŽā§āĻŦāĻžāϰāϕ⧇āχ āĻĢā§āϞ⧋āĻŸā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āĻ¨ā§‡ā§ŸāĻž āĻšā§Ÿā§‡āϛ⧇, āϚāĻžāχāϞ⧇ āφāĻŽāϰāĻž āχāĻ¨ā§āϟāĻŋāϜāĻžāϰ⧇āĻ“ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰāϤāĻžāĻŽāĨ¤

āφāĻŽāϰāĻž āϚāĻžāχāϞ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻŦ⧇āϏ⧇āϰ āύāĻžāĻŽā§āĻŦāĻžāϰ āϕ⧇ āĻ…āĻ¨ā§āϝ āϕ⧋āύ āĻŦ⧇āχāϏ⧇ āφāωāϟāĻĒ⧁āϟ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽā§‡ āĻĻ⧇āĻ–āĻžāϤ⧇ āĻĒāĻžāϰāĻŋāσ

				
					 var d1 int = 10
   fmt.Printf("in binary=%b\n", d1)
   fmt.Printf("in octal=%o\n", d1)
   fmt.Printf("in hexadecimal=%X\n", d1)

				
			

āφāωāϟāĻĒ⧁āϟ – 

				
					 in binary=1010
   in octal=12
   in Hexadecimal=A