ホームページ > バックエンド開発 > Golang > gRPC 経由で動的 JSON を送信するには「google.protobuf.Struct」が最適ですか?

gRPC 経由で動的 JSON を送信するには「google.protobuf.Struct」が最適ですか?

Patricia Arquette
リリース: 2024-12-11 13:55:11
オリジナル
671 人が閲覧しました

Is `google.protobuf.Struct` the Optimal Choice for Sending Dynamic JSON via gRPC?

「google/protobuf/struct.proto」は GRPC 経由で動的 JSON を送信する最良の方法ですか?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート