1. 개요

이 사용방법(예제)에서는 JSON에서 Protobuf로, Protobuf에서 JSON으로 변환하는 방법 보여 줍니다 .

Protobuf는 구조화된 데이터 를 직렬화 하는 데 사용되는 무료 오픈 소스 크로스 플랫폼 데이터 형식 입니다.

2. 메이븐 의존성

시작하려면 protobuf-java-util 의존성 을 포함하여 Spring Boot 프로젝트를 생성해 보겠습니다 .

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java-util</artifactId>
    <version>3.21.5</version>
</dependency>

3. JSON을 Protobuf 로 변환

JsonFormat 을 사용하여 JSON을 protobuf 메시지로 변환할 수 있습니다 .  JsonFormat 은 protobuf 메시지를 JSON 형식으로/에서 변환하는 유틸리티 클래스입니다. JsonFormat의 parser() 는 merge() 메서드를 사용하여  JSON을 protobuf 메시지로 구문 분석 하는 Parser 를 만듭니다 .

JSON을 사용하고 protobuf 메시지를 생성하는 메서드를 만들어 보겠습니다.

public static Message fromJson(String json) throws IOException {
    Builder structBuilder = Struct.newBuilder();
    JsonFormat.parser().ignoringUnknownFields().merge(json, structBuilder);
    return structBuilder.build();
}

다음 샘플 JSON을 사용하겠습니다.

{
    "boolean": true,
    "color": "gold",
    "object": {
      "a": "b",
      "c": "d"
    },
    "string": "Hello World"
}

이제 JSON에서 protobuf 메시지로의 변환을 검증하는 간단한 테스트를 작성해 보겠습니다.

@Test
public void givenJson_convertToProtobuf() throws IOException {
    Message protobuf = ProtobufUtil.fromJson(jsonStr);
    Assert.assertTrue(protobuf.toString().contains("key: \"boolean\""));
    Assert.assertTrue(protobuf.toString().contains("string_value: \"Hello World\""));
}

4. Protobuf 를 JSON으로 변환

protobuf를 MessageOrBuilder 로 받아들이는 JsonFormatprinter() 메서드 를 사용하여 protobuf 메시지를 JSON으로 변환할 수 있습니다 .

public static String toJson(MessageOrBuilder messageOrBuilder) throws IOException {
    return JsonFormat.printer().print(messageOrBuilder);
}

protobuf에서 JSON 메시지로의 변환을 검증하는 간단한 테스트를 작성해 보겠습니다.

@Test
public void givenProtobuf_convertToJson() throws IOException {
    Message protobuf = ProtobufUtil.fromJson(jsonStr);
    String json = ProtobufUtil.toJson(protobuf);
    Assert.assertTrue(json.contains("\"boolean\": true"));
    Assert.assertTrue(json.contains("\"string\": \"Hello World\""));
    Assert.assertTrue(json.contains("\"color\": \"gold\""));
}

5. 결론

이 기사에서는 JSON을 protobuf로 또는 그 반대로 변환하는 방법을 보여주었습니다.

항상 그렇듯이 이 사용방법(예제)에 사용된 모든 코드 샘플은 GitHub에서 사용할 수 있습니다 .

Generic footer banner