1
다음은 데모 목적으로 만 세 개만 가지고있는 JSON입니다.하지만 일반적으로 가끔은 꽤 큰 JSON을 얻습니다. 그 다음에 세 개가 없습니다. reportRecords
, 의 수가 많습니다. GSON 스트리밍을 사용하여 전체 JSON을 메모리에로드하지 않으려면 어떻게해야하나요?
{
"aggRecords":{
"reportRecords":[
{
"min":1.0,
"max":1.0,
"avg":1.0,
"count":18,
"sumSq":18.0,
"stddev":0.0,
"median":1.0,
"percentileMap":{
"95":1
},
"metricName":"TotalCount",
"dimensions":{
"env":"prod",
"pool":"hawk",
"Name":"CORE_utrade11",
"Type":"Error"
},
"value":18.0
},
{
"min":1.0,
"max":1.0,
"avg":1.0,
"count":25968842,
"sumSq":2.5968842E7,
"stddev":0.0,
"median":1.0,
"percentileMap":{
"95":1
},
"metricName":"TotalCount",
"dimensions":{
"env":"prod",
"pool":"hawk",
"Name":"ResponseHeaders",
"Type":"ConnectionPool"
},
"value":2.5968842E7
},
{
"min":1.0,
"max":1.0,
"avg":1.0,
"count":44,
"sumSq":44.0,
"stddev":0.0,
"median":1.0,
"percentileMap":{
"95":1
},
"metricName":"TotalCount",
"dimensions":{
"env":"prod",
"pool":"hawk",
"Name":"read-lookup",
"Type":"ClientPool"
},
"value":44.0
}
]
},
"minRecordsMap":{
}
}
는 지금은 추출 JSON 위의 직렬화하려고 그 누구의
Type
ClientPool
하고
ConnectionPool
은 그래서 메모리의 모든 내용을로드하지 않으
reportRecords
. 그리고 이것에 대해
GSON Streaming을 사용하려고 생각하지만 지금까지는이 작업을 수행 할 수 없습니다.
private static List<HostClientMetrics> loadMetrics(String url) {
List<HostClientMetrics> metrics = new ArrayList<HostClientMetrics>();
try {
InputStream input = new URL(url).openStream();
JsonReader reader = new JsonReader(new InputStreamReader(input, "UTF-8"));
// not sure what I should do here?
} catch (Exception ex) {
// log error
}
return metrics;
}
다음은 그냥 추출 할 필요가 내 HostClientMetrics
클래스
public class HostClientMetrics {
private String metricName;
private Map<String, Integer> percentileMap;
private String median;
private String stddev;
private String sumSq;
private String count;
private String avg;
private String max;
private String min;
public String getMetricName() {
return metricName;
}
public Map<String, Integer> getPercentileMap() {
return percentileMap;
}
public String getMedian() {
return median;
}
public String getStddev() {
return stddev;
}
public String getSumSq() {
return sumSq;
}
public String getCount() {
return count;
}
public String getAvg() {
return avg;
}
public String getMax() {
return max;
}
public String getMin() {
return min;
}
public Dimensions getDimensions() {
return dimensions;
}
public Dimensions dimensions;
public static class Dimensions {
private String env;
private String pool;
@SerializedName("Name")
private String name;
public String getEnv() {
return env;
}
public String getPool() {
return pool;
}
public String getName() {
return name;
}
}
}
입니다 그 reportRecords
그 Type
ClientPool
및 ConnectionPool
전용입니다. 필자의 예에서는 GSON Streaming을 어떻게 사용할 수 있습니까? 당신의 Diemensions
POJO에