Home >Backend Development >Golang >Can Go's `encoding/json` Package Partially Unmarshal JSON into a Map?
Partially Unmarshalling JSON into a Map in Go
Problem:
Consider a scenario where a Go server receives JSON data encapsulated within an object with key/value pairs. Each key corresponds to a specific type of value, and the server needs to unmarshal the value into the appropriate struct type according to the key. The question is, can this be achieved using the "encoding/json" package?
Solution:
To achieve this, we can partially unmarshal the JSON data into a map of key-value pairs, where the keys are strings and the values are json.RawMessage instances. RawMessage represents unprocessed JSON data, allowing us to further unmarshal it into specific structs or types.
Here's the code to demonstrate:
import ( "encoding/json" "fmt" ) func main() { data := []byte(`{"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},"say":"Hello"}`) var objmap map[string]json.RawMessage err := json.Unmarshal(data, &objmap) if err != nil { // Handle error } // Example: Unmarshal sendMsg value into a struct type sendMsg struct { User string Msg string } var s sendMsg err = json.Unmarshal(objmap["sendMsg"], &s) if err != nil { // Handle error } fmt.Println(s) }
Example Usage:
In the above example, the JSON data is first unmarshaled into a map[string]json.RawMessage. Then, to parse specific values like sendMsg, we can further unmarshal the corresponding RawMessage into a struct defined in the program.
This technique allows for flexible and efficient handling of JSON data with multiple key-value pairs, where the values can be unmarshaled into different types based on the key.
The above is the detailed content of Can Go's `encoding/json` Package Partially Unmarshal JSON into a Map?. For more information, please follow other related articles on the PHP Chinese website!