2015-02-12 100 views
3

是否有任何方法將給定的Json數組拆分爲單獨的Json元素使用Jackson庫?比方說,我有這樣的JSON數組:將Json數組分解爲使用Jackson的單個Json元素

[ 
    { 
     "key1":"value11", 
     "key2":"value12" 
    }, 
    { 
     "key1":"value21", 
     "key2":"value22" 
    } 
] 

分開後我要像單個元素的列表:

{ 
     "key1":"value11", 
     "key2":"value12" 
} 

{ 
     "key1":"value21", 
     "key2":"value22" 
} 

回答

1

最後,我找到了一個解決方案:

public List<String> split(String jsonArray) throws Exception { 
     List<String> splittedJsonElements = new ArrayList<String>(); 
     ObjectMapper jsonMapper = new ObjectMapper(); 
     JsonNode jsonNode = jsonMapper.readTree(jsonArray); 

     if (jsonNode.isArray()) { 
      ArrayNode arrayNode = (ArrayNode) jsonNode; 
      for (int i = 0; i < arrayNode.size(); i++) { 
       JsonNode individualElement = arrayNode.get(i); 
       splittedJsonElements.add(individualElement.toString()); 
      } 
     } 
     return splittedJsonElements; 
} 
6

這個問題的一個很好的解決方案就是使用Java 8 Streaming API進行迭代: JsonNode對象是Iterable,其中spliterator方法可用。因此,下面的代碼可用於:

public List<String> split(final String jsonArray) throws IOException { 
    final JsonNode jsonNode = new ObjectMapper().readTree(jsonArray); 
    return StreamSupport.stream(jsonNode.spliterator(), false) // Stream 
      .map(JsonNode::toString) // map to a string 
      .collect(Collectors.toList()); and collect as a List 
} 

另一種方法是跳過重新映射(調用toString),並返回一個List<JsonNode>元件代替。這樣,您可以使用JsonNode方法來訪問數據(getpath等)。

相關問題