问题描述
如何将以下JSON转换为Java HashMap 什么是POJO 如何用Jackson映射JSON对象
*{
"Meta Data": {
"1. information": "Daily Prices (open,high,low,close) and Volumes","2. Symbol": "IBM","3. Last Refreshed": "2020-08-14","4. Output Size": "Compact","5. Time Zone": "US/Eastern"
},"Time Series (Daily)": {
"2020-08-14": {
"1. open": "124.2000","2. high": "125.5600","3. low": "123.9100","4. close": "125.2700","5. volume": "2963753"
},"2020-08-13": {
"1. open": "125.9600","2. high": "126.3900","3. low": "124.7700","4. close": "125.0300","5. volume": "3171258"
}
}
}
这是Alphavantage的POJO:
public class Alphavantage {
public MetaData MetaData;
public TimeSeriesDaily timeSeriesDaily;
}
这是MetaData的POJO:
public class MetaData{
public String _1information;
public String _2Symbol;
public String _3LastRefreshed;
public String _4OutputSize;
public String _5TimeZone;
}
TimeSeriesDaily的Pojo:
public class TimeSeriesDaily {
public _20200814 _20200814;
}
这试图使用Java Jackson映射Pojo:
public static Map<Alphavantage,Map<TimeSeriesDaily,Object>> getAlphaData() {
RestAssured.baseURI = uri;
RequestSpecification request = RestAssured.given().log().all();
Response response = request.get(uri + "/query?function=TIME_SERIES_DAILY&symbol=IBM&apikey=demo");
String jsonResponse=response.getBody().asstring();
ObjectMapper mapper = new ObjectMapper();
Map<Alphavantage,Object>> data = mapper.readValue(jsonResponse,new TypeReference<Map<Alphavantage,Object>>>(){});
return data;
}
解决方法
要使其正常工作,Java对象需要与JSON字段键具有完全相同的名称。
因此,杰克逊将无法将1. Information
映射到_1Information
。
您需要使用以下内容:
@JsonProperty("1. Information")
public String _1Information;
其他所有字段都一样。