[英]How to convert JSON fields into a JAVA map using GSON
我有一個看起來像這樣的JSON數據:
{
"status": "status",
"date": "01/10/2019",
"time": "10:30 AM",
"labels": {
"field1": "value1",
"field2": "value2",
...
"field100": "value100"
}
"description": "some description"
}
在我的Java代碼中,我有兩個類:
Alerts
類具有以下字段-狀態,日期,時間,描述和Labels
類。
內部的Labels
類,應該容納從field1
到field100
(以及更多)的所有字段
我像這樣將JSON解析為GSON:
Alerts myAlert = gson.fromJson(alertJSON, Alert.class);
上面的代碼將JSON解析為Alert
對象和Labels
對象。
問題:不是將Labels對象中的字段( field1
, field2
等)映射為單獨的String字段,而是如何將它們解析為映射?
例如,Labels對象看起來像這樣:
public class Labels {
// I want to parse all the fields (field1, field2, etc) into
// this map
Map<String, String> fields = new HashMap<>();
}
我該怎么做呢?
您可以使用TypeToken直接指定標簽。
import java.lang.reflect.Type;
import com.google.gson.reflect.TypeToken;
Type mapType = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> myMap = gson.fromJson("{'field1':'value1','field2':'value2'}", mapType);
像這樣聲明Alert對象:
public class Alert {
private String description;
private String status;
private Map<String, String> labels;
...
}
為我工作,此代碼
Alert myAlert = gson.fromJson(alertJSON, Alert.class);
System.out.println(myAlert.getLabels());
將地圖打印為{field1=value1, field2=value2, field100=value100}
這樣就不需要中間對象
對於一般情況-一些更靈活的方式:gson可以注冊類型適配器:
Gson gson = new GsonBuilder().registerTypeAdapter(Labels.class, new LabelsDeserializer()).create();
對於您的情況,反序列化器為:
public class LabelsDeserializer implements JsonDeserializer<Labels>
{
@Override
public Labels deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException
{
if (!jsonElement.isJsonNull())
{
Labels label = new Labels();
jsonElement.getAsJsonObject().entrySet().forEach(entry -> label.getFields().put(entry.getKey(), entry.getValue().getAsString()));
return label;
}
else
{
return null;
}
}
}
為了進行序列化,需要實現JsonSerializer <...>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.