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 <riteshdvp...@gmail.com> 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 <ritesh...@gmail.com>
>> 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 <ritesh...@gmail.com>
>>>>> 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, <ritesh...@gmail.com>
>>>>>> 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 <ritesh...@gmail.com>
>>>>>>>> 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 protobuf+u...@googlegroups.com.
>>>>>>>>> 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 protobuf+u...@googlegroups.com.
>>>>>>> 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 protobuf+u...@googlegroups.com.
>>>>>>
>>>>> 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 protobuf+u...@googlegroups.com.
>>>
>> 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 protobuf+unsubscr...@googlegroups.com.
> 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 protobuf+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/CADqAXr49_BdFzvV%3DYVN4Y7Ng8-8AcLOipDrFau3pmKe1FQXWyg%40mail.gmail.com.

Reply via email to