Working with JSON metadata in Python GRPC

Anand Tripathi
Published in
2 min readMar 15, 2023


Photo by Ferenc Almasi on Unsplash

Recently I came across this issue while working with GRPC, that it's kind of hard to work with JSON metadata in GRPC proto object. If the key values are predefined then it works like a charm but there is no native implementation of JSON in that.

So let’s talk about how we can send metadata like objects in GRPC using Python. In gRPC, metadata can be sent along with a request or response. Metadata contains additional information about the request or response, such as authentication tokens, tracing information, and other custom headers.

To define a metadata message in a gRPC protocol buffer file (.proto), you can use the google.protobuf.Struct message type, which is defined in the google/protobuf/struct.proto file. This message type represents a JSON object and can be used to define arbitrary key-value pairs.

Here is an example of how to define a metadata message in a .proto file:

syntax = "proto3";
import "google/protobuf/struct.proto";
message MyRequest {
string message = 1;
google.protobuf.Struct metadata = 2;

In this example, the MyRequest message has a metadata field of type google.protobuf.Struct. This allows you to send arbitrary metadata along with the request.