Home > Software design >  Golang gRPC proto unexpected token
Golang gRPC proto unexpected token

Time:10-24

I defined a proto in Golang shown below (and the corresponding API path) and am trying to test the POST API call as shown below, but am getting the following unexpected token error.

I verified that this error is from the award_map section (defined to be map<string, People>), in which People is an array of strings. What is the proper data format for award_map in the curl request? Thanks

Error:

{"code":3, "message":"proto: syntax error : unexpected token [","details":[]}

Post API request:

curl --header "Content-Type: application/json" \
     -- request POST \
     -- data '{"school_name":"MIT", "awards":["Summa-cum-laude", "Magna-cum-laude"], "award_map":{"Summa-cum-laude":[], "Magna-cum-laude": ["john", "mark"]}}' \
   <POST_ENDPOINT>

Proto definitions:

message People {
    repeated string names = 1;
}

message School {
  string school_name = 1;
  repeated string awards = 2;
  map<string, People> award_map = 3;
}

CodePudding user response:

The award_map values need to be full People messages, not just arrays of strings. Try this:

{
  "school_name":"MIT",
  "awards": [
    "Summa-cum-laude",
    "Magna-cum-laude"
  ],
  "award_map": {
    "Summa-cum-laude": {
      "names": []
    },
    "Magna-cum-laude": {
      "names": [
        "john",
        "mark"
      ]
    }
  }
}

Copy/paste version:

'{"school_name":"MIT","awards":["Summa-cum-laude","Magna-cum-laude"],"award_map":{"Summa-cum-laude":{"names":[]},"Magna-cum-laude":{"names":["john","mark"]}}}'

Note that it isn't possible to define something like map<string, repeated string>.

  • Related