[英]How to create Java obj from JSON with varying field structure
我有以下格式的json
[
{
"id": "one",
"type": "Integer",
"value": "10"
},
{
"id": "two",
"type": "String",
"value": "StringValue"
},
{
"id": "three",
"type": "com.something.special",
"value": {
"splFiel1": "filedOne",
"splFiel2": "fielTwo",
"splFiel3": "fieldThree"
}
}
]
每個數組元素始終將具有三個字段id,type和value。 字段“值”的結構將取決於字段“類型”,並可以基於此而改變。
我想將此json轉換為Java對象,以便可以輕松訪問“ value” obj及其子字段。 我不認為這是將json轉換為java對象的常規方法,是由於基於同一json中字段“ type”的“ value”字段的字段結構有所不同。
能做到嗎? 我正在嘗試使用jackson json進行此操作,但是如果您有更好的選擇,請提出建議。
請提供任何想法,建議,參考鏈接。
您可以使用以下POJO轉換給定的JSON
public class Example {
@SerializedName("id")
private String id;
@SerializedName("type")
private String type;
@SerializedName("value")
private String value;
}
對於第三個字段,可以將其保留為簡單字符串。 然后,只要您希望將其內容解析為適當的構造java類,就可以檢查其中的類型並將json字符串解析為某個java對象
使用Google GSON庫讀取JSON文件。
使DataStructure存儲JSON數據。 dataStructure的value字段是字符串類型。 如果它存儲JSON字符串,則再次執行JSON解析。
class Data{
String id;
String type;
String value;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "Data [id=" + id + ", type=" + type + ", value=" + value + "]";
}
}
public class JSONData {
public static void main(String[] args) throws FileNotFoundException{
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream("in.json")));
JsonArray jArray = parser.parse(reader).getAsJsonArray();
List<Data> datas = new ArrayList<>();
for (JsonElement object : jArray) {
Data data = new Data();
JsonObject jObject = gson.fromJson(object, JsonObject.class);
data.setId(jObject.get("id").toString());
data.setType(jObject.get("type").toString());
data.setValue(jObject.get("value").toString());
System.out.println(data);
datas.add(data);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.