2015-02-12 75 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等)。

相关问题