Home >Backend Development >Golang >Can Go's `encoding/json` Package Partially Unmarshal JSON into a Map?

Can Go's `encoding/json` Package Partially Unmarshal JSON into a Map?

DDD
DDDOriginal
2024-12-29 04:27:13642browse

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn