1. Jackson Databind 라이브러리 추가
Gradle Project
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.2'
Maven Project
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.2</version>
</dependency>
2. Json 문자열 데이터 및 자바 객체 (예시)
Json String Data Sample (예시 데이터)
// json 예시
{
"companyName": "Apple Inc",
"ticker": "AAPL",
"market": "NASDAQ",
"price": 163.98
}
// 자바 소스(Json 문자열)
String jsonString = "{\"companyName\":\"Apple Inc\"," +
"\"ticker\":\"AAPL\"," +
"\"market\":\"NASDAQ\"," +
"\"price\":163.98}";
Java Object
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Stock {
public enum Market {NYSE, NASDAQ, AMEX};
private String companyName;
private String ticker;
private Market market;
private Double price;
// 기본 생성자
public Stock() {}
public Stock(String companyName, String ticker, Market market, Double price) {
this.companyName = companyName;
this.ticker = ticker;
this.market = market;
this.price = price;
}
public String getCompanyName() {
return companyName;
}
public String getTicker() {
return ticker;
}
public Double getPrice() {
return price;
}
public Market getMarket() {
return market;
}
}
3. Json String To Java Object
방법
1. ObjectMapper 객체 생성
ObjectMapper
: Jackson 라이브러리의 클래스
: JSON 콘텐츠를 Java 객체로 deserialization (역직렬화) 하거나
: Java 객체를 JSON으로 serialization (직렬화)
2. readValue(String content, Class<T> valueType) 메소드 사용
Json String To Java Object 예시
String jsonString = "{\"companyName\":\"Apple Inc\"," +
"\"ticker\":\"AAPL\"," +
"\"market\":\"NASDAQ\"," +
"\"price\":163.98}";
// 1. ObjectMapper 객체 생성
ObjectMapper mapper = new ObjectMapper();
// 2. readValue(String content, Class<T> valueType)
Stock StringToObject = mapper.readValue(jsonString, Stock.class);
// print
System.out.println("CompanyName: " + StringToObject.getCompanyName());
System.out.println("Ticker: " + StringToObject.getTicker());
System.out.println("Market: " + StringToObject.getMarket());
System.out.println("Price: " + StringToObject.getPrice());
주의
Java Object에서 기본 생성자를 생략 시 기본 생성자가 컴파일 할 경우 자동으로 생성이 되는데
만일 기본 생성자 외에 다른 생성자를 사용할 경우 기본 생성자도 꼭 선언해줍니다.
그렇지 않으면 변환 시 에러가 발생합니다.
다음과 같은 에러가 발생합니다.
Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.test.api.test3.Stock` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"companyName":"Apple Inc","ticker":"AAPL","market":"NASDAQ","price":163.98}"; line: 1, column: 2]
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1764)
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1209)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1415)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:362)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:195)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)
at com.test.api.test3.Main2.main(Main2.java:20)
Process finished with exit code 1
4. Java Object To Json String
방법
1. ObjectMapper 객체 생성
2. writeValueAsString(Object value) 메소드 사용
Java Object To Json String 예시 1
Stock stock = new Stock("Apple Inc", "AAPL", Stock.Market.NASDAQ, 163.98);
// 1. ObjectMapper 객체 생성
ObjectMapper mapper = new ObjectMapper();
// 2. writeValueAsString(Object value)
String jsonString = mapper.writeValueAsString(stock);
// print
System.out.println(jsonString);
Java Object To Json String 예시 2 (toString)
Java Object에 toString()을 오버라이딩 하여 활용할 수도 있습니다.
// Json String 형태로 출력 (Java Object에 추가)
@Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
String jsonString = null;
try {
jsonString = mapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return jsonString;
}
Stock stock = new Stock("Apple Inc", "AAPL", Stock.Market.NASDAQ, 163.98);
String jsonString = stock.toString();
System.out.println(jsonString);
'Backend > Java' 카테고리의 다른 글
[Java] 인터페이스 상속 (0) | 2022.04.25 |
---|---|
[Java] 자바 데이터 간 변환 (기본 타입, 문자열, Wrapper 클래스) (0) | 2022.03.20 |
[Java] 자바 콘솔 데이터 입력 받기 (Scanner) (0) | 2022.03.17 |
[Java] 자바 문자형 숫자 정수형 변환 (char type number to int) (0) | 2022.03.01 |
[Java] 자바 8 Comparator API 데이터 정렬 (0) | 2022.02.25 |