在JSON对象上使用分组操作类型

pva*_*rma 0 java json group-by

我有以下格式的JSON数据。

 [{
    "id": 16966,
    "post": "This is about road!",
    "category": "road",
},
.
.
.]
Run Code Online (Sandbox Code Playgroud)

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

Ale*_* C. 5

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

class Data {
    private int id;
    private String post;
    private String category;

    //getter, equals, hashcode, toString, etc.
}
Run Code Online (Sandbox Code Playgroud)

然后:

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

        groupedMap.forEach((k, v) -> System.out.println(k + " => " + v));
    }    
}
Run Code Online (Sandbox Code Playgroud)

输出:

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]]
Run Code Online (Sandbox Code Playgroud)

我在文件中添加了一些条目。我想您也可以编写自己的反序列化器,以在拥有临时列表并直接存储在地图中时摆脱该步骤,但是您要求一种简单的方法:-)。还要注意,我正在使用和Gson,但是如果没有它,您也可以实现这一点(但是您将编写更多代码)。