sourcetip

Java에서 JSON 유형을 바이트 배열 형식으로 변환

fileupload 2023. 3. 14. 21:49
반응형

Java에서 JSON 유형을 바이트 배열 형식으로 변환

UDP 프로토콜에서 바이트 형식을 사용하여 데이터를 전송하려고 할 때 문제가 있습니다. 문제는 json 유형 개체를 사용하여 데이터를 생성하려고 할 때 데이터의 바이트 형식을 가져올 수 없다는 것입니다. 이것이 샘플 코드입니다.

    JSONObject obj = new JSONObject();
    obj.put("name", "foo");
    obj.put("num", new Integer(100));
    obj.put("balance", new Double(1000.21));
    obj.put("is_vip", new Boolean(true));
    obj.put("nickname",null);

    sendData = obj.getBytes(); //this is error because not have methos getBytes();

문제는 알지만 json 객체를 바이트로 변환하는 방법을 찾을 수 없습니다. 제안해 주실 수 있나요?

문자열의 바이트를 가져옵니다.

obj.toString().getBytes(theCharset);

당신이 언급한 JSONObject가 이것으로부터 왔다고 가정하면 다음과 같은 바이트를 얻을 수 있습니다.

sendData = obj.toString().getBytes("utf-8");

불필요한 변환을 피하기 위해String로.byte[]제공된 문자 집합을 기반으로 인코딩을 수행합니다.JsonWriter직접 와 함께ByteArrayOutputStream예를 들어 (JsonValue서브타입 사용JsonWriter와 함께StringWriter):

ByteArrayOutputStream stream = new ByteArrayOutputStream();
Json.createWriter(stream).write(obj);

byte[] sendData = stream.toByteArray()

System.out.println("Bytes array: " + sendData);
System.out.println("As a string: " + stream.toString());

또한 다음과 같이 예쁜 인쇄도 가능합니다.

Json.createWriterFactory(
            Collections.singletonMap(JsonGenerator.PRETTY_PRINTING, true))
        .createWriter(stream)
        .write(obj);

딱 한 가지 아쉬운 점은 그것이 원라이너가 아니라는 것이다.적어도 3개는 필요합니다(전화를 생략하고 있는 것을 고려하면).JsonWriter.close()이 문맥에서는 불필요합니다).

다음에서 유틸리티 클래스 사용ObjectMapperjackson-databind프로젝트, 즉objectMapper.writeValueAsBytes(dto)돌아온다byte[]

@Autowired
private ObjectMapper objectMapper;

ContractFilterDTO filter = new ContractFilterDTO();
    mockMvc.perform(post("/api/customer/{ico}", "44077866")
            .contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
            .content(objectMapper.writeValueAsBytes(filter)))...

Maven 의존관계:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.8.1</version>
</dependency>

언급URL : https://stackoverflow.com/questions/10099787/convert-json-type-to-byte-array-format-in-java

반응형