2014-04-24 214 views
6

添加屬性,以JSON所以我jsonStr是這個使用傑克遜

[ 
    { 
     "data": [ 
      { 
       "itemLabel": "Social Media", 
       "itemValue": 90 
      }, 
      { 
       "itemLabel": "Blogs", 
       "itemValue": 30 
      }, 
      { 
       "itemLabel": "Text Messaging", 
       "itemValue": 60 
      }, 
      { 
       "itemLabel": "Email", 
       "itemValue": 90 
      } 
     ] 
    } 
] 

我想data陣列喜歡這裏這

[ 
    { 
     "data": [ 
      { 
       "itemLabel": "Social Media", 
       "itemValue": 90 
      }, 
      { 
       "itemLabel": "Blogs", 
       "itemValue": 30 
      }, 
      { 
       "itemLabel": "Text Messaging", 
       "itemValue": 60 
      }, 
      { 
       "itemLabel": "Email", 
       "itemValue": 90 
      } 
     ], 
     "label": "2007" 
    } 
] 

閱讀它說,做這樣的事情

後添加屬性
ObjectMapper mapper = new ObjectMapper(); 
JsonNode jsonNode = mapper.readTree(jsonStr); 
((ObjectNode) jsonNode).put("label", "2007"); 

String json = mapper.writeValueAsString(jsonNode); 

return json; 

問題是我一直收到一個錯誤

java.lang.ClassCastException: com.fasterxml.jackson.databind.node.ArrayNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode 

我在做什麼錯?我目前正在使用Jackson-core 2.2.2

+0

您的頂級節點代表一個數組,而不是一個對象。在添加屬性之前,您需要更深入一個槓桿。 – Henry

+0

這清除了爲什麼我得到的錯誤,但你可以詳細闡述一點?我不知道如何去更深入。我看到我需要ArrayNode? – cYn

回答

5

您的頂級節點代表一個數組,而不是一個對象。在添加屬性之前,您需要深入一層。

你可以使用這樣的事情:

JsonNode elem0 = ((ArrayNode) jsonNode).get(0); 
((ObjectNode) elem0).put("label", "2007"); 

當然,你可能需要添加一些錯誤處理,如果結構並不像你期望的那樣。

+0

完美。這次真是萬分感謝。 – cYn