在JSON对象上使用group-by类型的操作

我有以下格式的JSON数据。

[{ "id": 16966, "post": "This is about road!", "category": "road", }, . . .] 

我想根据类别对JSON条目进行分组。 因此,我将在一个数据结构中获得所有与道路相关的条目(例如列表)。 我知道我可以将数据放入Mongo DB甚至是关系数据库并进行查询。 没有这样做,有没有一些简单的方法来做到这一点?

如果您要读取整个JSON文件,一种简单的方法是首先将所有条目读入List ,然后将它们分组到Map>

 class Data { private int id; private String post; private String category; //getter, equals, hashcode, toString, etc. } 

然后:

 public class Test { public static void main(String args[] ) throws Exception { Gson gson = new Gson(); List list = gson.fromJson(new BufferedReader(new FileReader("myJson.json")), new TypeToken>(){}.getType()); Map> groupedMap = list.stream().collect(Collectors.groupingBy(Data::getCategory)); groupedMap.forEach((k, v) -> System.out.println(k + " => " + v)); } } 

哪个输出:

 road => [Data [id=16966, post=This is about road!, category=road], Data [id=16965, post=This is about road!, category=road]] land => [Data [id=16961, post=This is about land!, category=land]] 

我在文件中添加了一些条目。 我猜你也可以编写自己的反序列化程序,以便在你有一个临时列表并直接存储在地图中时摆脱这一步,但你要求一个简单的方法:-)。 还要注意我正在使用java-8和Gson,但是你也可以在没有它的情况下实现这一点(但是你会编写更多的代码)。

看看JXPath。 该库允许在java对象的集合上运行XPath查询。 因此,您可以使用流行的JSON解析器(例如Jackson或Gson)和JXPath将JSON映射到您的Java模型,以便在您的集合上运行XPath查询。

有关更多信息,请访问: http : //commons.apache.org/proper/commons-jxpath/