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 로 받아들이는 JsonFormat 의 printer() 메서드 를 사용하여 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에서 사용할 수 있습니다 .