This答えは、protoテキスト解析のいくつかの例を明確に示していますが、マップの例はありません。プロトがある場合はprotobufテキスト形式の解析マップ
:
map<int32, string> aToB
私のようなもの推測:
aToB {
123: "foo"
}
を、それは動作しません。誰かが正確な構文を知っていますか?
This答えは、protoテキスト解析のいくつかの例を明確に示していますが、マップの例はありません。プロトがある場合はprotobufテキスト形式の解析マップ
:
map<int32, string> aToB
私のようなもの推測:
aToB {
123: "foo"
}
を、それは動作しません。誰かが正確な構文を知っていますか?
私が間違って複数のk/Vのペアは次のようになりだろうと思ったので、私は最初に、迷う私を導いearlier answerから外挿してみました:
aToB { # (this example has a bug)
key: 123
value: "foo"
key: 876 # WRONG!
value: "bar" # NOPE!
}
libprotobuf ERROR: Non-repeated field "key" is specified multiple times.
適切な構文:
(注:私は、プロトコルバッファ言語の「proto3」バージョンを使用しています)
aToB {
key: 123
value: "foo"
}
aToB {
key: 876
value: "bar"
}
の名前を繰り返すパターンマップ変数はthis relevant portion of the proto3 Map documentationを再読した後でより意味をなさきます。マップは独自の「ペア」メッセージタイプを定義し、それを「繰り返し」としてマークすることと同じです。
より完全な例:
プロト定義:
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;
}
テキスト形式( "pbtxt")設定ファイルで:
user_collection {
description = "my default users"
users {
key: "user_1234"
value {
handle: "winniepoo"
paid_membership: true
}
}
users {
key: "user_9b27"
value {
handle: "smokeybear"
}
}
}
だろうC++プログラムによるメッセージコンテンツの生成
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));
テキスト形式は次のとおりです。
aToB {
key: 123
value: "foo"
}
テキスト形式にエンコードしてみてください。どのように表示する必要がありますか? – jpa