Programing/JAVA

Java CBOR parsing, CBOR to JSON Object

리커니 2018. 7. 13.
반응형

Java CBOR parsing, CBOR to JSON Object

 

 

CBOR 타입에 대한 설명은 아래의 Link를 참고하세요.

 

Link : http://cbor.io/impls.html

 

어떤 문제인지는 모르겠지만,

co.nstant.in 에서 제공하는 CBOR 디코더를 사용하면, Boolean Type의 데이터가 SIMPLE_VALUE 로 디토딩 되는 문제가 있었습니다.

 

예) compile group: 'co.nstant.in', name: 'cbor', version: '0.4'

 

Link : JAVA COBR 파싱 CBOR이란 Concise Binary Object Representation

 

그래서 jackson에서 제공하는 라이브러리를 활용하니 디코드가 잘 되더군요.

2개의 라이브러리가 필요합니다. jackson.dataformat과 jackson.databind

maven과 gradle은 아래 참고

 

[maven]

 

1
2
3
4
5
6
7
8
9
10
11
12
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-cbor -->
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-cbor</artifactId>
    <version>2.9.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.6</version>
</dependency>
cs

 

[gradle]

 

1
2
compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-cbor', version: '2.9.6'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.6'
cs

 

 

 

데이터 변환은 아래의 코드를 참고하세요.

 

1
2
3
4
5
6
7
8
9
10
11
ByteArrayInputStream bais = new ByteArrayInputStream(data);
/* CBOR decode - use jackson Library */
CBORFactory cf = new CBORFactory();
ObjectMapper mapper = new ObjectMapper(cf);
try {
    /* CBOR 을 JsonNode로 변환 */
    JsonNode jnode = mapper.readValue(bais, JsonNode.class);
    cms.insertMsd(jnode);
catch (Exception e) {
    e.printStackTrace();
}
cs

 

변환된 JsonNode 데이터는 .get(index) 로 접근이 가능합니다.

 

예를들어, 변환한 jnode가 아래와 같다면

[1,[1,1560816947,false,""]]

 

순서대로

 

1
2
3
4
5
6
int firstData = jnode.get(0).asInt();
JsonNode subNode = jnode.get(1);
int secondData = subNode.get(0).asInt();
int thirdData = subNode.get(1).asInt();
boolean fourthData = subNode.get(2).asBoolean();
String fifthData = subNode.get(3).textValue();
cs

 

 

이렇게 추출하실 수 있습니다.

반응형

댓글

💲 추천 글