最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

從消息包轉(zhuǎn)換到消息包

從消息包轉(zhuǎn)換到消息包

Go
慕田峪9158850 2023-05-15 10:16:38
所以我試圖在 Golang 中獲取 JSON 消息的字符串表示形式。我只想接收消息包編碼的 JSON,修改一些值并將其發(fā)回。我還沒(méi)有找到一種簡(jiǎn)單的方法來(lái)做到這一點(diǎn)。大多數(shù)時(shí)候,我無(wú)法提前知道 JSON 的結(jié)構(gòu)是什么(除了具有 JSON 結(jié)構(gòu)),所以我想做的就是接收二進(jìn)制消息。將其解碼為 JSON,將其作為字符串打印到標(biāo)準(zhǔn)輸出,修改內(nèi)容,再次將其轉(zhuǎn)換為 MessagePack 并發(fā)回。我一直在看這兩個(gè)包,但我不知道如何正確使用它們來(lái)完成這樣的簡(jiǎn)單任務(wù):https://godoc.org/github.com/vmihailenco/msgpackhttps://godoc.org/github.com/ugorji/go/codec所以我會(huì)收到這樣的東西:DF 00 00 00 01 A7 6D 65 73 73 61 67 65 A3 48 69 21我想打印這個(gè):{"message": "Hi!"}修改“嗨!”:{"message": "Hello Sir!"}將其作為消息包發(fā)送:DF 00 00 00 01 A7 6D 65 73 73 61 67 65 AA 48 65 6C 6C 6F 20 53 69 72 21我正在嘗試移植到 Golang 的當(dāng)前 Python 代碼:def decode_msgpack(jsonData):    packedStuff = 0    for key in jsonData.keys():        if type(jsonData[key]) is bytes:            packedStuff += 1            try:                jsonData[key] = umsgpack.unpackb(jsonData[key])            except umsgpack.InvalidStringException:                try:                    jsonData[key] = umsgpack.unpackb(jsonData[key], allow_invalid_utf8=True)                except umsgpack.InsufficientDataException:                    print("[!] InsufficientDataException")                    jsonData[key] = base64.b64encode(jsonData[key]).decode('utf-8')                else:                    jsonData[key] = base64.b64encode(jsonData[key]).decode('utf-8')    if packedStuff > 0:        return decode_msgpack(jsonData)    else:        return jsonData
查看完整描述

2 回答

?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

使用編解碼器庫(kù)并假設(shè)它{"message": "Hi"}是一張地圖,代碼看起來(lái)像這樣。


package main


import (

        "fmt"


        "github.com/ugorji/go/codec"

)


func main() {

        var data []byte

        original := map[string]string{"message": "Hi!"}

        enc := codec.NewEncoderBytes(&data, new(codec.MsgpackHandle))

        if err := enc.Encode(&original); err != nil {

                panic(err)

        }

        fmt.Printf("Encoded: ")

        for _, b := range data {

                fmt.Printf("%X ", b)

        }

        fmt.Printf("\n")

        decoded := make(map[string]string)

        dec := codec.NewDecoderBytes(data, new(codec.MsgpackHandle))

        if err := dec.Decode(&decoded); err != nil {

                panic(err)

        }

        fmt.Printf("Decoded: %v\n", decoded)

        decoded["message"] = "Hello Sir!"

        /* reinitialize the encoder */

        enc = codec.NewEncoderBytes(&data, new(codec.MsgpackHandle))

        if err := enc.Encode(&decoded); err != nil {

                panic(err)

        }

        fmt.Printf("Encoded: ")

        for _, b := range data {

                fmt.Printf("%X ", b)

        }

        fmt.Printf("\n")

}

也就是說(shuō),如果您獲取的{"message": "Hi"}是 JSON 字符串,則可以使用編解碼器將 JSON 解碼為地圖,更新地圖,然后將其重新編碼為 msgpack。


查看完整回答
反對(duì) 回復(fù) 2023-05-15
?
呼如林

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊

最好的方法是先解碼它,通過(guò) Go 結(jié)構(gòu)進(jìn)行更改,然后重新編碼。


data := []byte(`{"message": "Hi!"}`)

var p map[string]interface{}


// Decode into Struct

if err := json.Unmarshal(data, &p); err != nil {

    // TODO: handle err

}


// Modify contents

p["message"] = "Hello Sir!"


// Encode from struct

newData, err := json.Marshal(p)

if err != nil {

    // TODO: Handle err

}


fmt.Println(string(newData))


查看完整回答
反對(duì) 回復(fù) 2023-05-15
  • 2 回答
  • 0 關(guān)注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)