If you need Google Protobuf-to-JSON serialization (and vice versa) there is quick solution. Protobuf-java-format library provides serialization of protobuf-generated java classes to number of formats: JSON, XML, HTML, Java property file format, Smile, CoachDB.

Here is a step-by-step instruction.

Configure maven protobuf compiler plugin and dependency in your maven’s pom.xml:

    <!-- You may need to specify path to protobuf compiler -->



Add the protobuf-java-format dependency to your maven project (pom.xml):


Create protobuf definition in /src/main/protobuf/test.proto:

package example;
option java_multiple_files = true;
option java_outer_classname = "Messages";

message Person {
    required string name = 1;
    required Gender gender = 2;
    optional sint32 age = 3;

    enum Gender {
        MALE = 1;
        FEMALE = 2;

Now you may serialize and deserialize your Protobuf java objects:

Person person = Person.newBuilder()

System.out.println("Original=[" + person + "]");
String jsonView = com.googlecode.protobuf.format.JsonFormat.printToString(person);

System.out.println("JSON='" + jsonView + "'");

Person.Builder personBuilder = Person.newBuilder();
com.googlecode.protobuf.format.JsonFormat.merge(jsonView, personBuilder);

Person person2 = personBuilder.build();
System.out.println("Deserialized=[" + person2 + "]");
System.out.println("Original.equals.Deserialized=" + person.equals(person2));

This code will produce following output:

Original=[name: "Bob"
        gender: MALE
        age: 10
        JSON='{"name": "Bob","gender": "MALE","age": 10}'
Deserialized=[name: "Bob"
        gender: MALE
        age: 10

Protobuf-java-format uses proto object metadata (message.getAllFields()) under the hood. So, it maybe not a fastest solution and not optimized for mobile devices (sometimes it is not always desirable to include metadata into generated proto-classes to be used on mobile devices). Though, it’s easy to implement…