google.protobuf.Struct 型を利用すると効率的なソリューションが得られますGRPC 経由で動的 JSON データを送信します。次の User.proto ファイルを考えてみましょう:
syntax = "proto3"; package messages; import "google/protobuf/struct.proto"; service UserService { rpc SendJson (SendJsonRequest) returns (SendJsonResponse) {} } message SendJsonRequest { string UserID = 1; google.protobuf.Struct Details = 2; } message SendJsonResponse { string Response = 1; }
Anuj の解決策:
このアプローチは機能しますが、いくぶん複雑です:
var item = &structpb.Struct{ Fields: map[string]*structpb.Value{ "name": &structpb.Value{ Kind: &structpb.Value_StringValue{ StringValue: "Anuj", }, }, "age": &structpb.Value{ Kind: &structpb.Value_StringValue{ StringValue: "Anuj", }, }, }, }
ルークさん解決策:
この方法はより簡潔ですが、複数の変換が必要です:
m := map[string]interface{}{ "foo":"bar", "baz":123, } b, err := json.Marshal(m) s := &structpb.Struct{} err = protojson.Unmarshal(b, s)
推奨される解決策:
最も簡単で効率的ですこのアプローチは、structpb によって提供される組み込み関数を利用することです。 package:
m := map[string]interface{}{ "name": "Anuj", "age": 23, } details, err := structpb.NewStruct(m) // Check for errors as per documentation if err != nil { panic(err) } userGetRequest := &pb.SendJsonRequest{ UserID: "A123", Details: details, }
エラーを避けるために、structpb ドキュメントで指定されている変換ルールに必ず従ってください。
以上がgRPC 経由で動的 JSON を送信するには「google.protobuf.Struct」が最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。