第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解組 JSON 時接受 proto 結(jié)構(gòu)中的動態(tài)鍵

解組 JSON 時接受 proto 結(jié)構(gòu)中的動態(tài)鍵

Go
慕的地6264312 2022-10-17 10:15:58
我的 Proto 文件看起來像這樣:    message Test {        Service services = 1;    }        message Service {        string command = 1;        string root = 2;    }這個 .proto 可以支持這樣的 json:    {            "services": {                   "command": "command2",                "root": "/"             },    }但是,我想管理一個看起來像這樣的 json:       {                "services": {                        "service1": {                            "command": "command1",                            "root": "/"                        },                        "service2": {                            "command": "command2",                            "root": "/"                        },                },        }因此,這里所有的服務(wù)都將具有共同的結(jié)構(gòu),但鍵名會有所不同(即"service1", "service2")現(xiàn)在,我想從 test.json 讀取數(shù)據(jù)并解組它:    var test *Test    err := json.Unmarshal([]byte(file), &test)我應(yīng)該做些什么改變.proto才能成功解組這個json?
查看完整描述

1 回答

?
溫溫醬

TA貢獻1752條經(jīng)驗 獲得超4個贊

使用原型圖:


message Test {

    map<string, Service> services = 1;

}


message Service {

    string command = 1;

    string root = 2;

}

proto map 是在 Go中編譯的,因此在這種情況下,這是使用任意鍵對 JSON 建模的推薦方法。map[K]Vmap[string]*Service


這將給出以下輸出:


services:{key:"service1" value:{command:"command1" root:"/"}} services:{key:"service2" value:{command:"command2" root:"/"}}

示例程序:


package main


import (

    "encoding/json"

    "example.com/pb"

    "fmt"

)


const file = `{

            "services": {

                    "service1": {

                        "command": "command1",

                        "root": "/"

                    },

                    "service2": {

                        "command": "command2",

                        "root": "/"

                    }

            }

    }

`



func main() {

    test := &pb.Test{}

    err := json.Unmarshal([]byte(file), test)

    if err != nil {

        panic(err)

    }

    fmt.Println(test)

}


查看完整回答
反對 回復(fù) 2022-10-17
  • 1 回答
  • 0 關(guān)注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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