gpt4 book ai didi

java - 如何序列化来自同一对象中两个 url 的 json 数据?

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:20 26 4
gpt4 key购买 nike

我有两个 url(urlA 和 urlB),这两个 url 都以相同的 json 格式给我 json 响应。下面是我通过 urlA 调用返回的 JSON 字符串。为了便于理解,我将其缩短为只有三个 reportRecords。一般来说,它可能有超过 500 个 reportRecords

{
"aggRecords": {
"reportRecords": [
{
"min": 0,
"max": 12,
"avg": 0.3699187,
"count": 246,
"sumSq": 571,
"stddev": 1.4779372,
"median": 0,
"percentileMap": {
"95": 4
},
"metricName": "TransactionDuration",
"dimensions": {
"env": "dev",
"pool": "titan",
"Name": "PostProcessing",
"Type": "PostProcessing"
},
"value": 91
},
{
"min": 0,
"max": 23,
"avg": 2.3991289E-4,
"count": 1463031,
"sumSq": 3071,
"stddev": 0.045814946,
"median": 0,
"percentileMap": {
"95": 0
},
"metricName": "TransactionDuration",
"dimensions": {
"env": "dev",
"pool": "titan",
"Name": "ResourceContext",
"Type": "ResourceContext"
},
"value": 351
},
{
"min": 0,
"max": 1209,
"avg": 1.9203402,
"count": 7344636,
"sumSq": 71832774,
"stddev": 2.4683187,
"median": 2,
"percentileMap": {
"95": 4
},
"metricName": "TransactionDuration",
"dimensions": {
"env": "dev",
"pool": "titan",
"Name": "Client::Sync",
"Type": "Client::Sync"
},
"value": 14104200
}
]
}
}

类似地,我还通过调用 urlB 得到另一个 JSON 响应,它的 json 格式与上面所示的完全相同。现在,使用下面的代码,我可以仅在 DataTransactionMetrics 对象中序列化来自 urlA 的上述 json 响应。

public class JSONParser {
private static RestTemplate restTemplate = new RestTemplate();
private static final Gson gson = new Gson();
private static final String URLA = "urlA";
private static final String URLB = "urlB";

public static void main(String[] args) {
String jsonTransactionLine = restTemplate.getForObject(URLA, String.class);
System.out.println(jsonTransactionLine);

JsonElement jelement = new JsonParser().parse(jsonTransactionLine);
JsonObject jobject = jelement.getAsJsonObject();
jobject = jobject.getAsJsonObject("aggRecords");
JsonArray jarray = jobject.getAsJsonArray("reportRecords");

Type type = new TypeToken<List<DataTransactionMetrics>>() {
}.getType();
List<DataTransactionMetrics> serializeRecord = gson.fromJson(jarray, type);

// how can I serialize json data coming from URLB to serializeRecord object as well?
}
}

下面是我的 DataTransactionMetrics 类 -

public class DataTransactionMetrics {

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;

// getters here

public Dimensions dimensions;

class Dimensions {
private String env;
private String pool;
@SerializedName("Name")
private String name;

// getters here
}
}

问题陈述:-

如何在同一个 serializeRecord 对象中序列化来自 urlB 的 json 响应,以便来自 url(urlA 和 urlB)的所有数据都存在于同一个 serializeRecord 对象中?这可以做到吗?

最佳答案

只需对 urlB 执行相同操作并连接两个结果列表即可:

static final Type listOfMetricsType = new TypeToken<List<DataTransactionMetrics>>() {}.getType();

private List<DataTransactionMetrics> loadMetrics(String url) {
String jsonString = restTemplate.getForObject(URLA, String.class);

JsonObject json = new JsonParser().parse(jsonString).getAsJsonObject();
JsonArray jarr = json.getAsJsonObject("aggRecords").getAsJsonArray("reportRecords");

return gson.fromJson(jarr, listOfMetrics);
}

public static void main(String[] args) {
List<DataTransactionMetrics> metrics = loadMetrics(URLA);
metrics.addAll(loadMetrics(URLB));

// metrics now contains all metrics (from URLA and URLB)
}

关于java - 如何序列化来自同一对象中两个 url 的 json 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com