Sözlüklerin Protobuf listesi
.Proto'mda bir sözlük listesi tanımlamaya çalışıyorum
Bulduğum tüm örnekler, tek bir anahtar, değer çifti içeren bir sözlük sağlıyor:
message Pair {
string key = 1;
string value = 2;
}
message Dictionary {
repeated Pair pairs = 1;
}
veya şunun gibi bir şey:
message Dictionary {
message Pair {
map<string, string> values = 1;
}
repeated Pair pairs = 1;
}
ama daha büyük bir karma tür sözlüğünü nasıl ele alabilirim?
{
'k1': 1,
'k2': 2,
'k3': 'three',
'k4': [1,2,3]
}
İşleri daha da karmaşık hale getirmek için, karma değerler sözlüğünü tanımladıktan sonra, bu sözlüklerin bir listesi olan bir mesaj oluşturmam gerekiyor. Sanırım bu, iç içe geçmiş sözlükle başka bir tekrarlanan mesaj oluşturmak kadar kolay:
message DictList {
repeated Dictionary dlist = 1;
}
Yanıtlar
Aklıma gelen birkaç fikir:
- Görünüşe göre değer için kullanmak mümkün olmalı (tüm değer türlerini önceden biliyorsanız)
oneof
(https://developers.google.com/protocol-buffers/docs/proto3#oneof). Bu sorunu çözebilir, örneğin
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;
}
Gerçi kullanamazsınız map
veya repeated
içinde olamazsınız oneof
.
İsteğe bağlı alanları kullanabilir ve hepsini mesaj tanımında değerler olarak tanımlayabilirsiniz. Daha sonra, gerçekte kullandığınızları ayarlayın.
Sarmalayıcıları veya bilinen türleri kullanabilirsiniz, örneğin
Value
:https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Value
DÜZENLE
için Value
, bu gibi kullanılabilir:
map<string, google.protobuf.Value> dict = 1;
- Kullanım
struct
(for_stack tarafından önerildiği gibi) burada görülebilir: Bir Python Dictinden Protobuf Yapısını nasıl yaratırsınız?