2017-06-21 94 views
0

我有具有單獨的子部分和所有的子區段具有相同的數據類型的一個JSON文件,是否有任何方式,我們可以直接映射這些內對象GSON節點/鏈接對象映射

{ 
    "pre-execution": { 
    "nodes": [], 
    "links": [] 
    }, 
    "execution": { 
    "nodes": [], 
    "links": [] 
    }, 
    "completion": { 
    "nodes": [], 
    "links": [] 
    } 
} 

我只感興趣在節點和鏈接類型的數據,而不是從它屬於哪個類別。

我的階級結構看起來像這樣

public class NodeElement{ 
    private List<Node> nodes; 
    private List<Link> links; 
} 

有什麼辦法,我可以直接通過GSON庫映射。我正在使用的代碼是空的

Gson gson=new Gson(); 
    NodeElement nodeElements=gson.fromJson(jsonString,NodeElement.class); 

我得到的原因,因爲它沒有遵循正確的層次結構。關鍵是我只對NodeLink感興趣,所以爲什麼要擔心層次結構。

如果不是Gson,還可以使用其他庫嗎?

我試圖做這樣

for(Map.Entry<String,JsonElement> entry : entrySet){ 
     if(entry.getKey().contains("node")){ 
      siteFlowElement.addNodes((List<GoJSNode>) obj.get(entry.getKey())); 
     } 
     if(entry.getKey().contains("link")){ 
      siteFlowElement.addLinks((List<GoJSLink>) obj.get(entry.getKey())); 
     } 
    } 

    System.out.println("Nodes"+siteFlowElement.getNodes()); 
    System.out.println("Links"+siteFlowElement.getLinks()); 

但它返回null,

JSON對象是填充細

+0

你可以看看@ https://stackoverflow.com/questions/19551242/parsing-a-complex-json-object-using-gson-in-java這可能有助於 – Rahul

+0

它是沒有用的,因爲問題是通過Gson解析json,我知道問題在於我不想製作確切的類層次結構,因爲我只對節點和鏈接感興趣 – Ravi

回答

1
JsonParser parser = new JsonParser(); 
JsonObject o = parser.parse(your json string).getAsJsonObject(); 

通過對象獲取的JSONObject迭代後,並得到所有的節點和鏈接列表中的所有密鑰

例如 - Set<Entry<String, JsonElement>> entrySet = jsonObject.entrySet();

+0

@Ravi能工作嗎? –

+0

我做了這樣的事情 〜Set > entrySet = obj.entrySet(); \t \t爲(Map.Entry的<字符串,JsonElement>項:的entrySet){ \t \t \t如果(entry.getKey()包含( 「節點」)){ \t \t \t \t siteFlowElement.addNodes((列表 )obj.get(entry.getKey())); \t \t \t} \t \t \t如果(entry.getKey()包含( 「鏈接」)。){ \t \t \t \t siteFlowElement.addLinks((列表)obj.get(entry.getKey())); \t \t \t} \t \t} – Ravi

+0

它是在節點和鏈路賦予空值...ü可以告訴代碼 – Ravi