반응형
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()
이 문맥에서는 불필요합니다).
다음에서 유틸리티 클래스 사용ObjectMapper
의jackson-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
반응형
'sourcetip' 카테고리의 다른 글
다른 ng-include가 같은 페이지에 있습니다.각자에게 다른 변수를 송신하려면 어떻게 해야 합니까? (0) | 2023.03.14 |
---|---|
$addToSet과 반대되는 MongoDB (0) | 2023.03.14 |
각도 1.x에서 종속성을 느리게 로드하려면 Browserify 또는 Webpack을 사용해야 합니까? (0) | 2023.03.09 |
오라클 데이터베이스에서 무작위로 레코드를 가져오려면 어떻게 해야 합니까? (0) | 2023.03.09 |
React Functional Components의 모든 함수 핸들러에서 Callback을 사용해야 합니까? (0) | 2023.03.09 |