首页 >后端开发 >Golang >如何在 Go 中高效解析部分 JSON 映射?

如何在 Go 中高效解析部分 JSON 映射?

Susan Sarandon
Susan Sarandon原创
2024-12-26 07:45:09255浏览

How to Efficiently Parse Partially a JSON Map in Go?

在 Go 中将 JSON 数据解析为 Map

Websocket 服务器经常接收包装在键值对中的 JSON 数据,这些数据指示值的类型。虽然“encoding/json”包提供了方便的解组功能,但需要将 JSON 数据部分解析为映射以进行进一步处理。

使用 map[string]json.RawMessage 的方法

要实现部分解组,可以使用 map[string]json.RawMessage。这种方法允许将 JSON 数据解组到映射中,键是属性名称,值是未解析的 JSON 数据。

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 {
        fmt.Printf("Error unmarshaling JSON: %v", err)
        return
    }

    // Unpack Individual Values

    // Parsing sendMsg
    var s sendMsg
    err = json.Unmarshal(objmap["sendMsg"], &s)
    if err != nil {
        fmt.Printf("Error unmarshaling 'sendMsg': %v", err)
        return
    }
    fmt.Println("sendMsg:", s)

    // Parsing say
    var str string
    err = json.Unmarshal(objmap["say"], &str)
    if err != nil {
        fmt.Printf("Error unmarshaling 'say': %v", err)
        return
    }
    fmt.Println("say:", str)
}

type sendMsg struct {
    User string
    Msg  string
}

在这种方法中,objmap 将包含一个键“sendMsg” " 其值是表示 sendMsg 对象的原始 JSON 数据。通过进一步将此数据解组到 sendMsg 结构中,可以访问各个字段(User 和 Msg)。

注意: 为了确保成功解组,请记住导出 sendMsg 结构中的字段(即用户和消息)。

以上是如何在 Go 中高效解析部分 JSON 映射?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn