[英]converting json string to object through GSON
我正在嘗試將json字符串解析為java對象,但是我不確定對象的層次結構。
下面是json字符串
{
"TABLE_Detail":{
"1":{
"TABLE":"table1",
"RUN_DATE":"20170313",
"SEQ_NUM":"123",
"START_TIME":"20170313133144",
"END_TIME":"20170313133655"
},
"2":{
"TABLE":"table2",
"RUN_DATE":"20170313",
"SEQ_NUM":"123",
"START_TIME":"20170313133142",
"END_TIME":"20170313133723"
}
}
}
在這里,數字1
, 2
是動態的,可以去到任何數字,我試圖創建一個外部對象,有一個地圖類型密鑰字符串和值對象資料表的。 具有變量名TABLE_Detail
的映射。 但是TableData對象始終為null。 TableData對象具有所有變量。
請幫助我如何將此json字符串轉換為對象。
將1更改為table1,將2更改為table2:
public class TableDetails {
private TableData table1;
private TableData table2;
public TableDetails(){
}
// getter and setter
}
如果將json格式修改為“ Koen Van Looveren”,則提及:
public class TableDetails {
List<TableData> tables;
public TableDetails() {
}
// getter and setter
}
表類:Table.java:
public class TableData {
private String table;
private String run_date;
private String seq_num;
private String start_time;
private String end_time;
public TableData() {
}
// getter and setter
}
您可以嘗試將其反序列化為Map<String, Map<String, TableData>>
。 偽數組包裝在另一個對象中的原因Map<String, TableData>
不能正常工作。
以下示例將響應轉換為List<TableData>
:
public List<TableData> deserialize(String json) {
return Gson().<Map<String, Map<String, TableData>>>fromJson(json, new TypeToken<Map<String, Map<String, TableData>>>(){}.getType())
.values().iterator().next()
.entrySet().stream()
.sorted(Comparator.comparingInt(e -> Integer.parseInt(e.getKey())))
.map(Map.Entry::getValue)
.collect(Collectors.toList());
}
使用Gson時,對於這樣痛苦的json結構,您有兩種選擇。
使用Gson將json解析為Map並編寫一些類訪問返回的Map。此模式僅適用於訪問數據!
//usage TableDetails details=new TableDetails(gson.fromJson(json, Map.class)); //classes class TableDetails { private Map<String, Map> context; public TableDetails(Map root) { this.context = (Map<String, Map>) root.get("TABLE_Detail"); } public int size() { return context.size(); } public Table get(String key) { return new Table(context.get(key)); } } class Table { private Map context; public Table(Map context) { this.context = context; } public String getName() { return get("TABLE"); } private <T> T get(String name) { return (T) context.get(name); } ... }
編寫自己的Gson TypeAdapter,但這種方式可能會更復雜。如果您對編寫自定義TypeAdapter感興趣,則有一個我為提取json根而編寫的演示。 GSON-包圍-插件
我在尋找解決方案時,遇到了該解決方案起作用的站點之一。 我想歸功於以下網站。 感謝所有的支持。
我可以映射動態值1、2,因為映射鍵和值使用@SerializedName gson注釋對應地映射到TableData對象屬性。
http://findnerd.com/list/view/Parse-Json-Object-with-dynamic-keys-using-Gson-/24094/
在json中使用數組時,您需要使用[用於打開,使用]用於關閉
{
"TABLE_Detail": [
{
"TABLE": "table1",
"RUN_DATE": "20170313",
"SEQ_NUM": "123",
"START_TIME": "20170313133144",
"END_TIME": "20170313133655"
},
{
"TABLE": "table2",
"RUN_DATE": "20170313",
"SEQ_NUM": "123",
"START_TIME": "20170313133142",
"END_TIME": "20170313133723"
}
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.