英文:
Convert (Deserializing) JSON to Java POJO Jackson
问题
import java.util.Map;
public class Alphavantage {
public MetaData metaData;
public Map<String, TimeSeriesDaily> timeSeriesDaily;
}
public class MetaData {
public String _1Information;
public String _2Symbol;
public String _3LastRefreshed;
public String _4OutputSize;
public String _5TimeZone;
}
public class TimeSeriesDaily {
public String _1open;
public String _2high;
public String _3low;
public String _4close;
public String _5volume;
}
public static Map<Alphavantage, Map<String, 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, Map<String, Object>> data = mapper.readValue(jsonResponse, new TypeReference<Map<Alphavantage, Map<String, Object>>>() {});
return data;
}
英文:
How to convert below JSON to java HashMap
What will be the POJO
How map JSON object with Jackson
*{
"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"
}
}
}
This is POJO of Alphavantage:
public class Alphavantage {
public MetaData metaData;
public TimeSeriesDaily timeSeriesDaily;
}
This is POJO of MetaData:
public class MetaData{
public String _1Information;
public String _2Symbol;
public String _3LastRefreshed;
public String _4OutputSize;
public String _5TimeZone;
}
Pojo of TimeSeriesDaily:
public class TimeSeriesDaily {
public _20200814 _20200814;
}
This trying to map Pojo using Java Jackson:
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,Map<TimeSeriesDaily,Object>> data = mapper.readValue(jsonResponse, new TypeReference<Map<Alphavantage,Map<TimeSeriesDaily,Object>>>(){});
return data;
}
答案1
得分: 2
为了使其正常工作,Java对象的名称必须与JSON字段键完全相同。
因此,Jackson将无法将 1. Information
映射到 _1Information
。
您需要使用类似这样的方式:
@JsonProperty("1. Information")
public String _1Information;
对于每个其他字段也是一样的。
英文:
In order for it to work, the Java object needs to have the exact same name as the JSON field key.
So, Jackson would not be able to map 1. Information
to _1Information
.
You need to use something like this:
@JsonProperty("1. Information")
public String _1Information;
The same holds for every other field.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论