亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

解組 JSON 時接受 proto 結構中的動態鍵

解組 JSON 時接受 proto 結構中的動態鍵

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": "/"                        },                },        }因此,這里所有的服務都將具有共同的結構,但鍵名會有所不同(即"service1", "service2")現在,我想從 test.json 讀取數據并解組它:    var test *Test    err := json.Unmarshal([]byte(file), &test)我應該做些什么改變.proto才能成功解組這個json?
查看完整描述

1 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超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)

}


查看完整回答
反對 回復 2022-10-17
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號