2017-06-21 97 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