2014-04-24 21 views
6

więc moja jsonStr jest toDodawanie obiekt do JSON za pomocą Jacksona

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

Chcę dodać obiekt po tablicy data jak ta

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

Czytając tu jest napisane coś jak

ObjectMapper mapper = new ObjectMapper(); 
JsonNode jsonNode = mapper.readTree(jsonStr); 
((ObjectNode) jsonNode).put("label", "2007"); 

String json = mapper.writeValueAsString(jsonNode); 

return json; 

Problem polega na tym, że wciąż pojawia się błąd

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

Co robię źle? Obecnie używam Jackson-core 2.2.2

+0

Węzeł najwyższego poziomu reprezentuje tablicę, a nie obiekt. Zanim dodasz właściwość, musisz przejść jedną dźwignię głębiej. – Henry

+0

To wyjaśnia, dlaczego dostaję błąd, ale czy mógłbyś rozwinąć nieco więcej? Nie jestem pewien, jak pójść głębiej. Widzę, że potrzebuję ArrayNode? – cYn

Odpowiedz

5

Węzeł najwyższego poziomu reprezentuje tablicę, a nie obiekt. Zanim dodasz właściwość, musisz przejść o jeden poziom wyżej.

Można użyć coś takiego:

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

Oczywiście możesz dodać trochę obsługi błędów, jeśli struktura nie wygląda jak można się spodziewać.

+0

Idealny. Dziękuję Ci za to. – cYn

Powiązane problemy