Gson节点/链接对象映射

时间:2017-06-21 07:46:44

标签: java json jackson gson

我有一个JSON文件,它有独立的子部分,所有子部分都有相同类型的数据,有没有什么方法可以直接映射这些内部对象

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

我只对节点和链接类型的数据感兴趣,而不关心它属于哪个类别。

我的班级结构如下所示

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

有什么方法可以通过Gson库直接映射它。我正在使用的代码是null

   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对象填充正常

1 个答案:

答案 0 :(得分:1)

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

获取JsonObject后迭代对象并获取所有键的所有节点和链接

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