Ahh yes, thanks a lot. I was using wrong JsonFormat com.android.tools.idea.protobuf.util.JsonFormat
On Saturday, February 25, 2023 at 3:47:43 AM UTC+5:30 Adam Cozzette wrote: > Once you have the DynamicMessage, you can use the JsonFormat API the same > way you would use it with ordinary messages. > > On Fri, Feb 24, 2023 at 1:52 PM ritesh singh <[email protected]> wrote: > >> Thanks, any leads on generating json at run time using dynamicMessage. >> Any existing api util if you can point me to. >> >> On Saturday, February 25, 2023 at 2:44:14 AM UTC+5:30 Adam Cozzette wrote: >> >>> I think DynamicMessage is the right approach since you need to work with >>> proto files that are only known at run time. This will also allow you to >>> generate JSON. >>> >>> On Fri, Feb 24, 2023 at 11:19 AM ritesh singh <[email protected]> >>> wrote: >>> >>>> >>>> Or if there's a better different approach instead of relying on >>>> FileDescriptorSet and DynamicMessage - considering i have access to only >>>> .pb (generate by proto-lite) or .proto file. >>>> On Saturday, February 25, 2023 at 12:46:44 AM UTC+5:30 ritesh singh >>>> wrote: >>>> >>>>> Thanks Adam, so basically i am writing an Intellij plugin for Android >>>>> Studio. >>>>> The plugin will just take the .pb file and .proto file, run the protoc >>>>> compiler, generate FileDescriptorSet for proto and create a >>>>> DynamicMessage >>>>> using generated fileDescriptorSet and .pb. >>>>> >>>>> I was wondering if there a way to generate the json schema, as in >>>>> key-value pair. As we know, lite version doesn't include fileds, is it >>>>> possible to do it at run-time, as in extract keys in any phase? >>>>> >>>>> On Saturday, February 25, 2023 at 12:30:54 AM UTC+5:30 Adam Cozzette >>>>> wrote: >>>>> >>>>>> A serialized protocol buffer doesn't include any type information, so >>>>>> before you can parse one you have to know in advance which type you're >>>>>> expecting. If you want to be prepared to accept either A or B, then a >>>>>> good >>>>>> solution is to put both types inside a oneof in a parent message, and >>>>>> then >>>>>> just parse the parent message normally. >>>>>> >>>>>> It doesn't matter which protobuf implementation created the .pb file, >>>>>> since all implementations use the same wire format. >>>>>> >>>>>> That is true that the Java lite implementation doesn't support >>>>>> reflection and doesn't include descriptors, so it cannot serialize >>>>>> protos >>>>>> to JSON. If you can stick to the binary format then that would be ideal >>>>>> since that format is useable everywhere. >>>>>> >>>>>> On Thu, Feb 23, 2023 at 5:33 PM ritesh singh <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Also does it matter if .pb was created using proto lite and android >>>>>>> end. >>>>>>> >>>>>>> I believe the lite version doesn't store fields, so converting it to >>>>>>> json using proto-util won't work and i need to make use of reflection. >>>>>>> >>>>>>> On Fri, 24 Feb, 2023, 6:54 am ritesh singh, <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Thanks Adam. I will give it a shot. I thought of using *protoc* >>>>>>>> compiler, but what if my proto file contains nested messages >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> *message A { B b = 1}* >>>>>>>> *message B {* >>>>>>>> *}* >>>>>>>> >>>>>>>> >>>>>>>> After running *protoc *on the proto file, it will generate 2 java >>>>>>>> classes. I won't know which generated class to use against my .pb >>>>>>>> file, as >>>>>>>> my plugin is only aware of .pb and .proto file. >>>>>>>> >>>>>>>> Please correct me, if am wrong. >>>>>>>> On Friday, February 24, 2023 at 6:42:05 AM UTC+5:30 Adam Cozzette >>>>>>>> wrote: >>>>>>>> >>>>>>>>> I suspect that your code is getting an error because it's trying >>>>>>>>> to parse a .proto file as a serialized protocol buffer. (This won't >>>>>>>>> work >>>>>>>>> since .proto files use a text representation very different from the >>>>>>>>> standard protobuf binary format.) Probably the best way to fix this >>>>>>>>> problem >>>>>>>>> would be to invoke protoc with --descriptor_set_out to parse the >>>>>>>>> proto file >>>>>>>>> and convert it into a serialized FileDescriptorSet. A >>>>>>>>> FileDescriptorSet is >>>>>>>>> just a protocol buffer, so once you have it in that form you can >>>>>>>>> easily >>>>>>>>> parse it like you would parse any other serialized proto. >>>>>>>>> >>>>>>>>> On Thu, Feb 23, 2023 at 4:59 PM ritesh singh <[email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hello, >>>>>>>>>> >>>>>>>>>> I am working on creating a Android Studio plugin for proto data >>>>>>>>>> store. >>>>>>>>>> Android uses proto-lite, my current approach, i get the .pb file >>>>>>>>>> and .proto file and use the same in intellij plugin to deserialise >>>>>>>>>> it. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> *val psiFile = >>>>>>>>>> PsiManager.getInstance(project).findFile(protoFile) val >>>>>>>>>> protoFileContent = >>>>>>>>>> psiFile!!.text val fileDescriptorProto: >>>>>>>>>> DescriptorProtos.FileDescriptorProto = >>>>>>>>>> DescriptorProtos.FileDescriptorProto.parseFrom(protoFileContent.byteInputStream()) >>>>>>>>>> >>>>>>>>>> val fileDescriptor = >>>>>>>>>> Descriptors.FileDescriptor.buildFrom(fileDescriptorProto, >>>>>>>>>> arrayOfNulls(0)) >>>>>>>>>> val messageDescriptor = fileDescriptor.messageTypes[0] val buffer = >>>>>>>>>> pbFile.contentsToByteArray() val messageBuilder: >>>>>>>>>> DynamicMessage.Builder = >>>>>>>>>> DynamicMessage.newBuilder(messageDescriptor) >>>>>>>>>> messageBuilder.mergeFrom(buffer) val message = >>>>>>>>>> messageBuilder.build() val >>>>>>>>>> text: String = TextFormat.printToString(message)* >>>>>>>>>> >>>>>>>>>> Above code is throwing error in parsing step,* Protocol message >>>>>>>>>> tag had invalid wire type.* >>>>>>>>>> >>>>>>>>>> Thanks in advance. >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> 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 view this discussion on the web visit >>>>>>>>>> https://groups.google.com/d/msgid/protobuf/7fe3a019-e846-4792-8d8a-1655a2d93975n%40googlegroups.com >>>>>>>>>> >>>>>>>>>> <https://groups.google.com/d/msgid/protobuf/7fe3a019-e846-4792-8d8a-1655a2d93975n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>> . >>>>>>>>>> >>>>>>>>> -- >>>>>>>> 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 view this discussion on the web visit >>>>>>>> https://groups.google.com/d/msgid/protobuf/5042e4c5-2643-4587-812a-730206f14424n%40googlegroups.com >>>>>>>> >>>>>>>> <https://groups.google.com/d/msgid/protobuf/5042e4c5-2643-4587-812a-730206f14424n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> -- >>>>>>> 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 view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/protobuf/CABaCSzEG%2B19VhXjsYJpphbxA%2B3s7mAmUSiDF_Kmkkr5_Y0A%3Dsg%40mail.gmail.com >>>>>>> >>>>>>> <https://groups.google.com/d/msgid/protobuf/CABaCSzEG%2B19VhXjsYJpphbxA%2B3s7mAmUSiDF_Kmkkr5_Y0A%3Dsg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- >>>> 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 view this discussion on the web visit >>>> https://groups.google.com/d/msgid/protobuf/10949542-694e-48b3-8743-7711237f9725n%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/protobuf/10949542-694e-48b3-8743-7711237f9725n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >> 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 view this discussion on the web visit >> https://groups.google.com/d/msgid/protobuf/ee678da0-6fbc-4c32-ac1a-8c5499efaf66n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/protobuf/ee678da0-6fbc-4c32-ac1a-8c5499efaf66n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/protobuf/64095888-a06f-4acb-a280-d2f9bac626b9n%40googlegroups.com.
