Hmm, that's strange. If that's not working, you can always just look at the file in a Piper client, though.
On Tue, Jun 6, 2017 at 8:03 PM, Qian Zhang <[email protected]> wrote: > It seems the URL http://google3/experimental/users/acozzette/ > map_reflection_test.cc?rcl=158157727 is not working, I can not access it > :-( > > > Regards, > Qian Zhang > > On Wed, Jun 7, 2017 at 1:32 AM, Adam Cozzette <[email protected]> > wrote: > >> Here's an example of how to do it: http://google3/experimenta >> l/users/acozzette/map_reflection_test.cc?rcl=158157727 It's a bit clunky >> because you just have to reflect on the map field like you would a repeated >> field, but it works. >> >> On Mon, Jun 5, 2017 at 6:08 PM, Qian Zhang <[email protected]> wrote: >> >>> Thanks Adam. >>> >>> Can you please let me know which API I can use to do reflection on a map? >>> >>> >>> Regards, >>> Qian Zhang >>> >>> On Mon, Jun 5, 2017 at 11:42 PM, Adam Cozzette <[email protected]> >>> wrote: >>> >>>> Doing reflection on a map is a little bit tricky, but the way to do it >>>> is to treat it as a repeated field since that is how it is actually >>>> represented on the wire. A map is a stored as a repeated message field, >>>> where in each message the key is field 1 and the value is field 2. >>>> >>>> On Mon, Jun 5, 2017 at 1:37 AM, Qian Zhang <[email protected]> wrote: >>>> >>>>> Hi Adam, >>>>> >>>>> We are using picojson <https://github.com/kazuho/picojson> to parse >>>>> the JSON file. >>>>> >>>>> After more debugging, I think I have found the root cause: In the code >>>>> here >>>>> <https://github.com/apache/mesos/blob/1.2.0/3rdparty/stout/include/stout/protobuf.hpp#L575>, >>>>> we are trying to find a field by the key of an entry in a map, obviously >>>>> it >>>>> will fail since the key of any map entries is not in the protobuf message >>>>> definition (the .proto file), and to avoid finding field by a map entry's >>>>> key, in this method >>>>> <https://github.com/apache/mesos/blob/1.2.0/3rdparty/stout/include/stout/protobuf.hpp#L387:L407>, >>>>> we need to check if "field->is_map()" is true which is currently missed, >>>>> if >>>>> the field is a map, then we should use the reflection to construct a map >>>>> message, however I do not find a method in protobuf to do that, I find a >>>>> lot of "Addxxx()" methods (e.g., "AddString()", "AddInt64()", etc.), but >>>>> not a method for adding a map. There is a method >>>>> "InsertOrLookupMapValue()", but that is a private method which I can not >>>>> call in my code. >>>>> >>>>> So can you please suggest how to add a map message? Thanks! >>>>> >>>>> >>>>> Regards, >>>>> Qian Zhang >>>>> >>>>> On Sat, Jun 3, 2017 at 1:02 AM, Adam Cozzette <[email protected]> >>>>> wrote: >>>>> >>>>>> It looks to me like your JSON syntax is right. Could you post the C++ >>>>>> code you are using to parse the JSON file? >>>>>> >>>>>> On Fri, Jun 2, 2017 at 1:16 AM, Qian Zhang <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I have a C++ project in which there is a .proto file, and in that >>>>>>> file, there is protobuf message which has a map field: >>>>>>> "map<string, string> annotations = 5;" >>>>>>> >>>>>>> And the JSON file to be parsed with that .proto file has the >>>>>>> following content: >>>>>>> "annotations": { >>>>>>> "com.example.key1": "value1", >>>>>>> "com.example.key2": "value2" >>>>>>> } >>>>>>> >>>>>>> The .proto file is in proto2 syntax (it has "syntax = "proto2";" at >>>>>>> the beginning) and I am using protobuf-3.3.0, the compilation succeed, >>>>>>> but >>>>>>> I found the annotation map always has only one entry, and both the >>>>>>> entry's >>>>>>> key and value are "" which is obviously not correct. >>>>>>> >>>>>>> Any suggestions? >>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Protocol Buffers" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to [email protected]. >>>>>>> To post to this group, send email to [email protected]. >>>>>>> Visit this group at https://groups.google.com/group/protobuf. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >> > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
