2017-08-01 78 views
0

我想创建一个如下添加多个节点的Json到一个利用杰克逊

{ 
    "properties": { 
    "a": { 
     "b": 1, 
     "c": "2", 
     "d": 3, 
     "e": 4 
    }, 
    "f": { 
     "g": 5, 
     "h": "6", 
     "i": 7, 
     "j": 8 
    } 
    } 
} 

JSON结构类似,但我不能。

我已经写了下面的代码

for(Annotation a : annotationList) { 
    ObjectNode objectNode1 = readAnnotation(a); 
    String name= getName(key); 
    objectNode.putPOJO(name, objectNode1); 
    propertiesObjectNode.put("properties", objectNode1); 
} 

创建一个JSON但最终我只有一个在性节点。

我有以下的Json

{ 
    "properties" : { 
    "f" : { 
     "g" : 5, 
     "h" : "6", 
     "i" : 7, 
     "j" : 8 
    } 
    } 
} 
+0

使objectNode1成为一个列表,并将所有readAnnotations添加到propertiesObjectNode并创建json。现在可能是第二个注释是唯一被添加到属性中的注释。 – digidude

+0

这可能,但我不想添加为列表。 – rahul

+1

通过每个注释调用一次'propertiesObjectNode.put(“properties”,whatever)来覆盖你的'properties'项目。首先创建'properties'项目,然后为每个注释设置其中一个字段? – Aaron

回答

0
propertiesObjectNode.put("properties", objectNode1); 

这一行里面一个for循环,所以你在每次迭代覆盖它。最后,只剩下1个节点,这是上次迭代的结果。

0

也许我在这里没有基础,但是如果您使用的是杰克逊,为什么不使用ObjectMapper类。它会将POJO转换为JSON。

ObjectMapper mapper = new ObjectMapper(); 
MyPojo pojo = new MyPojo(); 

String json = mapper.writeValueAsString(pojo); 

如果您想设置类似的东西,杰克逊可以采取地图并输出json版本。

你会碰到这样的:

Map<String, Object> a = new HashMap<String, Object>(); 
a.put("b", 1); 
a.put("c", "2"); 

Map<String, Object> f = new HashMap<String, Object>(); 
f.put("g", 5); 
f.put("h", "6"); 

Map<String, Object> propWrapper = new HashMap<String, Object>(); 
propWrapper.put("a", a) 
propWrapper.put("f", f) 

Map<String, Object> props = new HashMap<String, Object>(); 
props.put("properties", props); 

ObjectMapper mapper = new ObjectMapper(); 
String json = mapper.writeValueAsString(props); 

,并应输出你要找的结构。使用自己的POJO来获得更多意义的完整结构会更好,但这应该提供一个想法。