以下の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;
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加