现在有这样一个数据

  1. {

  2. "systemid": "123",

  3. "productid": "123",

  4. "dataArray": [

  5. {

  6. "line_num": 2,

  7. "subjectcodecv": 1,

  8. "subjectname": "公司",

  9. "subjectid": "1001",

  10. "resource_members_id": "003",

  11. "resource_members_name": "xx"

  12. }, {

  13. "line_num": 2,

  14. "subjectcodecv": 2,

  15. "subjectname": "产品",

  16. "subjectid": "10",

  17. "resource_members_id": "002",

  18. "resource_members_name": "11xx"

  19. }, {

  20. "line_num": 2,

  21. "subjectcodecv": 3,

  22. "subjectname": "产品",

  23. "subjectid": "10",

  24. "resource_members_id": "001",

  25. "resource_members_name": "22xx"

  26. }, {

  27. "line_num": 1,

  28. "subjectcodecv": 1,

  29. "subjectname": "公司",

  30. "subjectid": "1001",

  31. "resource_members_id": "005",

  32. "resource_members_name": "xx"

  33. }, {

  34. "line_num": 1,

  35. "subjectcodecv": 2,

  36. "subjectname": "产品",

  37. "subjectid": "10",

  38. "resource_members_id": "004",

  39. "resource_members_name": "11xx"

  40. }, {

  41. "line_num": 1,

  42. "subjectcodecv": 3,

  43. "subjectname": "产品",

  44. "subjectid": "10",

  45. "resource_members_id": "003",

  46. "resource_members_name": "22xx"

  47. }

  48. ]

  49. }

需求:将JSON字符串中的dataArray数组中的json对象按line_num字段进行分组,然后将每组中的json对象按照resource_members_id字段进行排序(后续还有对每组排序后的json对象进行业务操作,这里不做)

实现:

  1. package com.feidao.test;

  2. import com.alibaba.fastjson.JSON;

  3. import com.alibaba.fastjson.JSONArray;

  4. import com.alibaba.fastjson.JSONObject;

  5. import java.util.ArrayList;

  6. import java.util.List;

  7. import java.util.Map;

  8. import java.util.stream.Collectors;

  9. /**

  10. * author: LN create: 2019-05-23 09:40

  11. */

  12. public class GroupByTest {

  13. public static void main(String[] args) {

  14. String jsonStr = "{\n" +

  15. "\t\"systemid\": \"123\",\n" +

  16. "\t\"productid\": \"123\",\n" +

  17. "\t\"dataArray\": [\n" +

  18. "\t\t{\n" +

  19. "\t\t\t\"line_num\": 2,\n" +

  20. "\t\t\t\"subjectcodecv\": 5,\n" +

  21. "\t\t\t\"subjectname\": \"公司\",\n" +

  22. "\t\t\t\"subjectid\": \"1001\",\n" +

  23. "\t\t\t\"resource_members_id\": \"003\",\n" +

  24. "\t\t\t\"resource_members_name\": \"xx\"\n" +

  25. "\t\t}, {\n" +

  26. "\t\t\t\"line_num\": 2,\n" +

  27. "\t\t\t\"subjectcodecv\": 4,\n" +

  28. "\t\t\t\"subjectname\": \"产品\",\n" +

  29. "\t\t\t\"subjectid\": \"10\",\n" +

  30. "\t\t\t\"resource_members_id\": \"002\",\n" +

  31. "\t\t\t\"resource_members_name\": \"11xx\"\n" +

  32. "\t\t}, {\n" +

  33. "\t\t\t\"line_num\": 2,\n" +

  34. "\t\t\t\"subjectcodecv\": 3,\n" +

  35. "\t\t\t\"subjectname\": \"产品\",\n" +

  36. "\t\t\t\"subjectid\": \"10\",\n" +

  37. "\t\t\t\"resource_members_id\": \"001\",\n" +

  38. "\t\t\t\"resource_members_name\": \"22xx\"\n" +

  39. "\t\t}, {\n" +

  40. "\t\t\t\"line_num\": 1,\n" +

  41. "\t\t\t\"subjectcodecv\": 3,\n" +

  42. "\t\t\t\"subjectname\": \"公司\",\n" +

  43. "\t\t\t\"subjectid\": \"1001\",\n" +

  44. "\t\t\t\"resource_members_id\": \"005\",\n" +

  45. "\t\t\t\"resource_members_name\": \"xx\"\n" +

  46. "\t\t}, {\n" +

  47. "\t\t\t\"line_num\":1,\n" +

  48. "\t\t\t\"subjectcodecv\": 1,\n" +

  49. "\t\t\t\"subjectname\": \"产品\",\n" +

  50. "\t\t\t\"subjectid\": \"10\",\n" +

  51. "\t\t\t\"resource_members_id\": \"004\",\n" +

  52. "\t\t\t\"resource_members_name\": \"11xx\"\n" +

  53. "\t\t}, {\n" +

  54. "\t\t\t\"line_num\": 1,\n" +

  55. "\t\t\t\"subjectcodecv\": 5,\n" +

  56. "\t\t\t\"subjectname\": \"产品\",\n" +

  57. "\t\t\t\"subjectid\": \"10\",\n" +

  58. "\t\t\t\"resource_members_id\": \"003\",\n" +

  59. "\t\t\t\"resource_members_name\": \"22xx\"\n" +

  60. "\t\t}\n" +

  61. "\t]\n" +

  62. "}";

  63. JSONObject originalJsonData = JSONObject.parseObject(jsonStr);

  64. JSONArray dataArray = originalJsonData.getJSONArray("dataArray");

  65. List<JSONObject> jsonObjectList = new ArrayList<>();

  66. //将原始数据中的json数组中的json对象存到一个list集合中

  67. for (Object o : dataArray) {

  68. jsonObjectList.add((JSONObject) o);

  69. }

  70. //对集合中的json对象进行分组

  71. //然后返回一个map集合,key代表组名,value代表该组中的数据

  72. Map<String, List<JSONObject>> groupByLineNumData = jsonObjectList.stream()

  73. .collect(Collectors.groupingBy(x -> x.getString("line_num")));

  74. //遍历所有的分组,对每组内的JSON对象进行排序

  75. for (String s : groupByLineNumData.keySet()) {

  76. List<JSONObject> list = groupByLineNumData.get(s);

  77. JSONArray jsonSorted = jsonArraySort(list.toString());

  78. //后续有对排序后的json对象的业务操作

  79. //这里只将它输出

  80. System.out.println(jsonSorted);

  81. }

  82. }

  83. /**

  84. * 对多个JOSN对象进行自定义字段排序

  85. *

  86. * @param jsonArrStr 要排序的JSON数据

  87. * @return 返回排序后的结果

  88. */

  89. private static JSONArray jsonArraySort(String jsonArrStr) {

  90. JSONArray jsonArr = JSON.parseArray(jsonArrStr);

  91. JSONArray sortedJsonArray = new JSONArray();

  92. List<JSONObject> jsonValues = new ArrayList<JSONObject>();

  93. //存放json数组中的每个json对象

  94. for (int i = 0; i < jsonArr.size(); i++) {

  95. jsonValues.add(jsonArr.getJSONObject(i));

  96. }

  97. //对集合中的JOSN对象进行自定义排序

  98. jsonValues.sort((a, b) -> {

  99. String valA = a.getString("resource_members_id");

  100. String valB = b.getString("resource_members_id");

  101. return valA.compareTo(valB);

  102. });

  103. for (int i = 0; i < jsonArr.size(); i++) {

  104. sortedJsonArray.add(jsonValues.get(i));

  105. }

  106. return sortedJsonArray;

  107. }

  108. }

输出结果:

输出了两个排序好的JSON数组

line_num为1:

resource_members_id也排好序了

  1. [

  2. {

  3. "subjectname": "产品",

  4. "resource_members_name": "22xx",

  5. "line_num": 1,

  6. "resource_members_id": "003",

  7. "subjectid": "10",

  8. "subjectcodecv": 5

  9. }, {

  10. "subjectname": "产品",

  11. "resource_members_name": "11xx",

  12. "line_num": 1,

  13. "resource_members_id": "004",

  14. "subjectid": "10",

  15. "subjectcodecv": 1

  16. }, {

  17. "subjectname": "公司",

  18. "resource_members_name": "xx",

  19. "line_num": 1,

  20. "resource_members_id": "005",

  21. "subjectid": "1001",

  22. "subjectcodecv": 3

  23. }

  24. ]

line_num为2

resource_members_id也排好序了

  1. [

  2. {

  3. "subjectname": "产品",

  4. "resource_members_name": "22xx",

  5. "line_num": 2,

  6. "resource_members_id": "001",

  7. "subjectid": "10",

  8. "subjectcodecv": 3

  9. }, {

  10. "subjectname": "产品",

  11. "resource_members_name": "11xx",

  12. "line_num": 2,

  13. "resource_members_id": "002",

  14. "subjectid": "10",

  15. "subjectcodecv": 4

  16. }, {

  17. "subjectname": "公司",

  18. "resource_members_name": "xx",

  19. "line_num": 2,

  20. "resource_members_id": "003",

  21. "subjectid": "1001",

  22. "subjectcodecv": 5

  23. }

  24. ]

将JSON对象中的某个字段进行分组和排序(java实现)相关推荐

  1. mongodb 如何删除 字段值为 json对象中的某个字段值

    例如: { attributes: { birthday:'1988-01-01', name: 'aq' } } birthday是attributes字段的value的一个字段, 我要删除birt ...

  2. 使用Jackson忽略JSON对象上的新字段[复制]

    本文翻译自:Ignoring new fields on JSON objects using Jackson [duplicate] This question already has an ans ...

  3. XE3随笔6:SuperObject 的 JSON 对象中还可以包含 方法

    SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: IS ...

  4. 检查密钥是否存在于json对象中

    本文翻译自:Check if a key exists inside a json object amt: "10.00" email: "sam@gmail.com&q ...

  5. JSON对象中的函数调用,JSON格式的字符串对应的函数调用方法

    json对象中的函数调用:直接使用 json变量名+函数名+()进行调用,特别注意这对括号:如果是获取到的json格式的字符串,想要调用它的方法前,需要先将该字符串转换成json对象,在调用对应的方法 ...

  6. 如何替换json对象中的key

    来源 | https://www.cnblogs.com/jaxu/archive/2021/06/01/14836088.html 看到标题你可能会想,如此简单的问题值得去探究吗?如果我有一个jso ...

  7. JS-JSON-获取JSON对象中的数据展示到表格里

    JS-JSON-获取JSON对象中的数据展示到表格里 1.要求 点击按钮,将学生信息展示到表格里,并显示总记录条数. 2.实现思路 创建JSON对象 先创建一个JSON对象data,有总人数total ...

  8. 移除Java对象中的属性_移除/添加 JSON对象中的某个属性

    因为JSON完全是动态的,所以给一个JSON对象添加一个属性是很简单的,如: var json = {}; json.username='xtayfjpk'; 这样就为json对象添加了一个名为use ...

  9. JS 遍历JSON对象中的键值对

    对象:一组无序属性的集合,属性的值可以是任意的类型: json也是对象,数据都是成对的,也就是键值对: json实际上就是一组格式化后的字符串数据. 遍历JSON对象中的数据,可通过for-in循环实 ...

最新文章

  1. 从事GIS开发多年,2017年对GIS行业的心得,尤其对三维GIS的理解
  2. Android5.1修改以太网MAC地址(SElinux)【转】
  3. 如何查看抓包文件所使用的捕获过滤器
  4. NuGet的本地服务器安装与Package的发布(呕吐)
  5. CSS学习17之动画
  6. 学习、纪律与交流——《Clean Coder》读后感
  7. 记录一下SpringCloud-Gateway使用lb动态路由遇到的坑
  8. 敏捷测试与传统测试的区别
  9. 化学实验中计算机技术的应用,浅谈计算机在基础化学实验中的应用
  10. JAVA学习之 Model2中的Servlet与.NET一般处理程序傻傻分不清楚
  11. VS C++ 字符大写变换 字符小写变换 tolower toupper
  12. java severlet 例子_Java开发Servlet实例
  13. 电脑通过android手机上网
  14. 装系统提示缺少计算机所需的介质驱动程序,win8系统UEFi安装提示“缺少计算机所需的介质驱动程序”的图文步骤...
  15. 二层交换机与三层交换机交换原理
  16. VS安装包下载和环境配置
  17. Android 闹钟app 课程设计
  18. 项目依赖aar 以及 依赖嵌套aar
  19. iOS YYModel使用方法
  20. http请求 状态码204

热门文章

  1. 独立站现在好不好做?个人适合做跨境电商独立站吗?
  2. 【转载】Windows 10系统默认将画面显示比例调整至125%或150%,最高分辨率已经达到3840×2160(4K)这一级别。...
  3. 1、Fiddler的基本介绍
  4. 计算机科学与技术素材,计算机科学与技术ppt素材
  5. python找第二大的数索引_python – 在numpy数组中查找多个值的行索引
  6. php用户注册重复_php如何禁止重复注册用户名
  7. vba 保存word里面的图片_笔记7 【office精华课】一套课程学会Word+Excel+PPT(一)【Word】(2020年第37周 周五)...
  8. SpringBoot实战教程(4)| 整合Mybatis
  9. EclipseLink+H2 快速搭建JPA开发环境
  10. [Ext JS 7]7.2 事件(Event)