2016-12-26 34 views
0

我有以下格式如何創建從JSON Java的OBJ與不同領域的結構

[ 
    { 
     "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" 
     } 
    } 
] 

的JSON每個數組元素總是會有三個字段標識,類型和值。 字段「值」的結構將取決於字段「類型」,並可以基於此進行更改。

我想將此json轉換爲Java對象,以便我可以輕鬆訪問「value」obj及其子字段。我不認爲這是java對象轉換的正常json的原因是由於基於同一個json中的「type」字段的「value」字段的不同字段結構。

可以這樣做嗎? 我想用jackson json來做到這一點,但如果你有更好的選擇,請確實建議。

請提供任何想法,建議,參考鏈接。

+0

我建議你使用org.json通過每個對象首先是解析字符串作爲一個數組,循環,使用解析對象的get方法找到類型,然後映射對象是類。 –

回答

1

您可以使用下面POJO爲您給出JSON

public class Example { 

@SerializedName("id") 
private String id; 
@SerializedName("type") 
private String type; 
@SerializedName("value") 
private String value; 
} 

的轉換對於第三場,你可以把它簡單的字符串。然後,只要您希望將其內容解析爲適當的構造Java類,就可以檢查它的類型並將json字符串解析爲一些java對象。

1

使用Google GSON庫讀取JSON文件。

使DataStructure存儲JSON數據。 dataStructure的值字段是字符串類型。如果它存儲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); 
     } 
    } 
}