Ich versuchte zunächst aus earlier answer Extrapolierung, die mich in die Irre geführt, weil ich falsch mehrere k/v Paare gedacht würde wie folgt aussehen:
aToB { # (this example has a bug)
key: 123
value: "foo"
key: 876 # WRONG!
value: "bar" # NOPE!
}
das führte zu dem folgenden Fehler:
libprotobuf ERROR: Non-repeated field "key" is specified multiple times.
Die richtige Syntax für mehrere Schlüssel-Wert-Paare:
(Hinweis: Ich bin die „proto3“ Version des Protokolls Puffer Sprache)
aToB {
key: 123
value: "foo"
}
aToB {
key: 876
value: "bar"
}
Das Muster der den Namen der Wiederholung map-Variable macht mehr Sinn nach dem erneuten Lesen this relevant portion of the proto3 Map documentation, die erklärt, dass Karten sind gleichbedeutend mit der Definition Ihrer eigenen "Paar" Nachrichtentyp und dann als "wiederholt" zu markieren.
Ein vollständigeres Beispiel:
proto Definition:
syntax = "proto3";
package myproject.testing;
message UserRecord {
string handle = 10;
bool paid_membership = 20;
}
message UserCollection {
string description = 20;
// HERE IS THE PROTOBUF MAP-TYPE FIELD:
map<string, UserRecord> users = 10;
}
message TestData {
UserCollection user_collection = 10;
}
Textformat ("pbtxt") in einer Konfigurationsdatei:
user_collection {
description = "my default users"
users {
key: "user_1234"
value {
handle: "winniepoo"
paid_membership: true
}
}
users {
key: "user_9b27"
value {
handle: "smokeybear"
}
}
}
++ C Das würde Generieren Sie den Nachrichteninhalt programmgesteuert
myproject::testing::UserRecord user_1;
user_1.set_handle("winniepoo");
user_1.set_paid_membership(true);
myproject::testing::UserRecord user_2;
user_2.set_handle("smokeybear");
user_2.set_paid_membership(false);
using pair_type =
google::protobuf::MapPair<std::string, myproject::testing::UserRecord>;
myproject::testing::TestData data;
data.mutable_user_collection()->mutable_users()->insert(
pair_type(std::string("user_1234"), user_1));
data.mutable_user_collection()->mutable_users()->insert(
pair_type(std::string("user_9b27"), user_2));
Versuchen Sie die Codierung in das Textformat, so dass Sie sehen, wie es sein sollte? – jpa