gpt4 book ai didi

java - 如何在序列化过程中将 JSON 属性名称映射到我们自己的变量名称?

转载 作者:行者123 更新时间:2023-11-30 03:49:56 26 4
gpt4 key购买 nike

我正在尝试将下面的 JSON 序列化为 DataMetrics 类 -

String json = "[{\"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}]";

通常,对于像 dimensions 这样的嵌套对象,您将为其声明另一个 POJO

class DataMetrics {

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;

private Dimensions dimensions;

private class Dimensions{
private String env;
private String pool;
private String Name;
}
}

下面是我的代码,运行良好 -

public void test() {
String json = "[{\"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}]";

final Gson gson = new Gson();
final Type type = new TypeToken<List<DataMetrics>>() {}.getType();
final List<DataMetrics> records = gson.fromJson(json, type);
}

这里的成员变量名称与 JSON 属性名称完全匹配。

  • stdDev => stddev
  • 名称 => 名称
  • 百分位数 => percentileMap

现在有什么方法可以让我拥有自己的变量名称并将 JSON 属性名称映射到这些名称(如果可能的话)?我不想将 Name 保留为 Dimensions 类中的变量名称。

最佳答案

使用SerializedName注释:

import com.google.gson.annotations.SerializedName;

class DataMetrics {

[..]

private Dimensions dimensions;

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

关于java - 如何在序列化过程中将 JSON 属性名称映射到我们自己的变量名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24710807/

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