简体   繁体   English

如何在序列化期间将JSON属性名称映射到我们自己的变量名称?

[英]How to map JSON property names to our own variable names during serialization?

I am trying to serialize my below JSON to a DataMetrics class - 我正在尝试将下面的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}]";

Generally, for nested objects like dimensions you'll declare another POJO for it 通常,对于诸如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;
  }
}

And below is the code I have which works fine - 下面是我拥有的可以正常工作的代码-

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);
}

Here member variable names is matching the JSON property name exactly as it is. 在这里,成员变量名称与JSON属性名称完全匹配。

  • stdDev => stddev stdDev => stddev
  • name => Name name => Name
  • percentile => percentileMap percentile => percentileMap

Now Is there any way, I can have my own variable names and map the JSON property name to those names, if possible? 现在有什么办法,如果可能的话,我可以拥有自己的变量名称并将JSON属性名称映射到这些名称? I don't want to keep Name as a variable name in my Dimensions class. 我不想在我的Dimensions类中将Name保留为变量名。

Use SerializedName annotation: 使用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;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM