You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Assuming one adheres to buf lint's naming convention (snake_case for casing), using protoc-gen-go generates snake_cased json tags for each message's go-struct representation. The TS types are camelCased as per TS/ES standards. Thus, one cannot marshal go-structs to JSON and load it in your TS code.
Describe the solution you'd like
I'd love to have an option to either have the go-struct json tags be camelCased or, even though it's weird in terms of TS style guides, have the TS types be snake_cased so that marshalling and unmarshalling / loading works as expected.
Describe alternatives you've considered
Manually fixing the casing / using something like retag
The text was updated successfully, but these errors were encountered:
one cannot marshal go-structs to JSON and load it in your TS code
You can! protojson.Marshal serializes your message to JSON in Go, and the method fromJsonString() parses from JSON in TS. This interoperability is a crucial feature and it definitely works reliably.
The generation of the json tag pre-dated the formalization of the JSON<->PB specification. In it's current state, using encoding/json does not produce JSON that conforms to any particular pre-defined schema.
For similar reasons, you cannot JSON.parse() a message in TS. Our fromJsonString() methods use JSON.parse() under the hood, but they also take care of field name variations and other details that protobuf and TypeScript can represent, but JSON cannot, for example NaN. It also gives you structural validation when parsing JSON and is interoperable with all other protobuf implementations.
Closing this, but let us know if you think there's a missing piece.
Assuming one adheres to
buf lint
's naming convention (snake_case for casing), usingprotoc-gen-go
generates snake_cased json tags for each message's go-struct representation. The TS types are camelCased as per TS/ES standards. Thus, one cannot marshal go-structs to JSON and load it in your TS code.Describe the solution you'd like
I'd love to have an option to either have the go-struct json tags be camelCased or, even though it's weird in terms of TS style guides, have the TS types be snake_cased so that marshalling and unmarshalling / loading works as expected.
Describe alternatives you've considered
Manually fixing the casing / using something like retag
The text was updated successfully, but these errors were encountered: