The `encoding/json` package
encoding/json
Package
The encoding/json
package provides functions for encoding and decoding JSON data. It is part of the standard library in Go.
1. json.Marshal
Converts a Go object into a JSON byte slice.
package main
import ( "encoding/json" "fmt")
func main() { data := map[string]interface{}{ "name": "Areen", "age": 16, } jsonData, err := json.Marshal(data) if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(jsonData))}
Output:
{"name":"Areen","age":16}
2. json.MarshalIndent
Converts a Go object into a JSON byte slice with indentation.
package main
import ( "encoding/json" "fmt")
func main() { data := map[string]interface{}{ "name": "Areen", "age": 16, } jsonData, err := json.MarshalIndent(data, "", " ") if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(jsonData))}
Output:
{ "name": "Areen", "age": 16}
3. json.Unmarshal
Parses JSON data into a Go object.
package main
import ( "encoding/json" "fmt")
func main() { jsonData := `{"name":"Areen","age":16}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonData), &data) if err != nil { fmt.Println("Error:", err) return } fmt.Println(data)}
Output:
map[age:16 name:Areen]
4. json.NewDecoder
and Decoder.Decode
Reads JSON data from an io.Reader
.
package main
import ( "encoding/json" "fmt" "strings")
func main() { jsonData := `{"name":"Areen","age":16}` reader := strings.NewReader(jsonData) decoder := json.NewDecoder(reader) var data map[string]interface{} err := decoder.Decode(&data) if err != nil { fmt.Println("Error:", err) return } fmt.Println(data)}
Output:
map[age:16 name:Areen]
5. json.NewEncoder
and Encoder.Encode
Writes a Go object as JSON to an io.Writer
.
package main
import ( "encoding/json" "os")
func main() { data := map[string]interface{}{ "name": "Areen", "age": 16, } encoder := json.NewEncoder(os.Stdout) err := encoder.Encode(data) if err != nil { fmt.Println("Error:", err) }}
Output:
{"name":"Areen","age":16}
6. json.Valid
Checks if a byte slice contains valid JSON.
package main
import ( "encoding/json" "fmt")
func main() { jsonData := `{"name":"Areen","age":16}` if json.Valid([]byte(jsonData)) { fmt.Println("Valid JSON") } else { fmt.Println("Invalid JSON") }}
Output:
Valid JSON
7. json.RawMessage
Allows delaying or customizing JSON decoding.
package main
import ( "encoding/json" "fmt")
func main() { jsonData := `{"name":"Areen","details":{"age":16}}` var data map[string]json.RawMessage err := json.Unmarshal([]byte(jsonData), &data) if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(data["details"]))}
Output:
{"age":16}
These examples demonstrate how to use the encoding/json
package effectively. Let me know if you’d like further explanations or additional use cases!