शब्दकोशों की प्रोटोबॉफ़ सूची
मैं अपने .proto में शब्दकोशों की एक सूची को परिभाषित करने की कोशिश कर रहा हूं
मुझे मिले सभी उदाहरणों में एक एकल कुंजी, मूल्य जोड़ी के साथ एक शब्दकोश प्रदान करना है:
message Pair {
string key = 1;
string value = 2;
}
message Dictionary {
repeated Pair pairs = 1;
}
या ऐसा कुछ:
message Dictionary {
message Pair {
map<string, string> values = 1;
}
repeated Pair pairs = 1;
}
लेकिन मैं मिश्रित प्रकारों का एक बड़ा शब्दकोश कैसे संभालूंगा?
{
'k1': 1,
'k2': 2,
'k3': 'three',
'k4': [1,2,3]
}
चीजों को और जटिल करने के लिए, एक बार जब मैंने मिश्रित मूल्यों के शब्दकोश को परिभाषित किया है तो मुझे एक संदेश बनाने की आवश्यकता है जो इन शब्दकोशों की एक सूची है। मुझे लगता है कि शब्दकोश नेस्टेड के साथ एक और दोहराया संदेश बनाने के रूप में आसान है:
message DictList {
repeated Dictionary dlist = 1;
}
जवाब
कुछ विचार जिनके साथ मैं आया था:
- ऐसा लगता है कि यह संभव हो जाना चाहिए (यदि आप सभी मूल्य प्रकार अग्रिम जानते हैं) का उपयोग करने के
oneof
मूल्य के लिए (https://developers.google.com/protocol-buffers/docs/proto3#oneof) है। यह समस्या को हल कर सकता है, जैसे
message Value {
oneof oneof_values {
string svalue = 1;
int ivalue = 2;
...
}
}
message Pair {
string key = 1;
Value value = 2;
}
message Dictionary {
repeated Pair pairs = 1;
}
आप हालांकि का उपयोग map
या repeated
अंदर नहीं कर सकते oneof
।
आप वैकल्पिक फ़ील्ड का उपयोग कर सकते हैं और उन सभी को संदेश परिभाषा में मान के रूप में परिभाषित कर सकते हैं। फिर केवल उन लोगों को सेट करें, जो आप वास्तव में उपयोग करते हैं।
आप रैपर या ज्ञात प्रकारों का उपयोग कर सकते हैं, जैसे
Value
:https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Value
संपादित करें
इसके लिए Value
, इसका उपयोग इस तरह किया जा सकता है:
map<string, google.protobuf.Value> dict = 1;
- उपयोग
struct
(for_stack द्वारा सुझाए गए अनुसार), यहां देखा जा सकता है: आप पायथन डिक्ट से प्रोटोबॉफ़ संरचना कैसे बनाते हैं?