grpcurl
grpcurl copied to clipboard
Any encoding of the symbols?
Hi,
I have a struct in this format
type Response struct {
Url string `protobuf:"bytes,1,opt,name=url,json=url,proto3" json:"url,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
I set it as
return &Response{
Url: "https://abcd.com/&abcd"
}
When I make the request, I got this response
{
"url": "https://abcd.com/\u0026abcd"
}
The \u0026
should be &
here but I don't know why it appears to be encoded. I wonder whether that's what grpcurl does? Because I haven't found anything with my code which does the encoding...
In JSON `'\u0026' is the same as '&'; the former is unicode escaped.
I dug a little bit: grpcurl
is not doing any encoding explicitly, but it uses the "encoding/json"
Go package (part of Go standard runtime). That package apparently chooses to escape &
, <
, and >
by default, in case the JSON data is going to be rendered into an HTML page.
A change to fix this is fairly straight-forward.
FYI, until this is fixed, that is still valid JSON and any/all consumers of it will know how to correctly unescape that character.
So if you pipe the JSON to jq
, you'll see that it successfully unescapes the value.
Hi Joshua,
Thanks so much for the timely response!! Sorry I'm still a bit new to Golang
Currently I'm using grpcurl to test my endpoint. Are you saying that I'd get the same response as \u0026
but I might need to do some marshalling on it if I wanna use it on my frontend? Or you're saying that this is only an issue with encoding/json
and I should be able to ignore it if using it on my own app?
Thanks again
but it uses the "encoding/json" Go package (part of Go standard runtime).
Also, is it possible if we could use an option not to escape these?