Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JsonThriftSerializer produces invalid JSON for maps with integer/enum keys #191

Open
arkadiyt opened this issue May 21, 2015 · 3 comments
Open

Comments

@arkadiyt
Copy link

Consider the following thrift struct:

struct TestStruct {
  1: optional map<i64, string> map;
}

When I serialize it with JsonThriftSerializer:

import com.twitter.scrooge.JsonThriftSerializer

val testStruct = TestStruct(Some(Map(1L -> "")))
val serializer = JsonThriftSerializer(TestStruct)
serializer.toString(testStruct)

I expect to get:

{"map":{"1":""}}

I actually get:

{"map":{1:""}}

which is not valid json. For instance attempting to parse with jq:

$ echo '{"map":{1:""}}' | jq .
parse error: Object keys must be strings at line 1, column 10
@johnynek
Copy link
Collaborator

We are actually just calling through to Thrift's JSON support, which it appears is broken.

Two ways forward:

  1. Figure out if the thrift was fixed in a later version.

  2. Write our own TProtocol that does a better job here.

@mosesn
Copy link
Contributor

mosesn commented May 29, 2016

I'd be happy to help someone tackle either of 1 or 2.

@mosesn
Copy link
Contributor

mosesn commented May 9, 2017

@johnynek do you remember what the denouement of this issue was on your end?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

3 participants