Я пытаюсь сериализовать мой ниже 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
name
=> Name
percentile
=> 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;
}
}