JSONObject和JSONArray的排序

运行环境:java1.8


方法:

/**
	 * 对jsonarray做比较:size不同,返回false; 排序后的String对比,不相同返回false;
	 * @param expect
	 * @param actual
	 * @return
	 */
	public static boolean compareJsonArray(JSONArray expect, JSONArray actual) {
		int expect_size = expect.size();
		int actual_size = actual.size();
		if (expect_size != actual_size) {
			logger.error("the two JSONArrays' size is not equal >>"
					+ "expect JSONArray's size  is [[" + expect.size()
					+ "]], but actual JSONArray's size is [[" + actual.size()
					+ "]]");
			return false;
		}
		if (!sortJsonArray(expect).toString().equals(
				sortJsonArray(actual).toString())) {
			logger.error("the two JSONArrays' value is not equal >>"
					+ "expect is \r\n" + expect + ", \r\nbut actual  is \r\n"
					+ actual);
			return false;
		}
		return true;
	}

	/**
	 * JSONObject排序
	 * 
	 * @param obj
	 * @return
	 */
	@SuppressWarnings("all")
	public static JSONObject sortJsonObject(JSONObject obj) {
		Map map = new TreeMap();
		Iterator<String> it = obj.keys();
		while (it.hasNext()) {
			String key = it.next();
			Object value = obj.get(key);
			if (value instanceof JSONObject) {
				// System.out.println(value + " is JSONObject");
				map.put(key, sortJsonObject(JSONObject.fromObject(value)));
			} else if (value instanceof JSONArray) {
				// System.out.println(value + " is JSONArray");
				map.put(key, sortJsonArray(JSONArray.fromObject(value)));
			} else {
				map.put(key, value);
			}
		}
		return JSONObject.fromObject(map);
	}

	/**
	 * JSONArray排序
	 * 
	 * @param array
	 * @return
	 */
	@SuppressWarnings("all")
	public static JSONArray sortJsonArray(JSONArray array) {
		List list = new ArrayList();
		int size = array.size();
		for (int i = 0; i < size; i++) {
			Object obj = array.get(i);
			if (obj instanceof JSONObject) {
				list.add(sortJsonObject(JSONObject.fromObject(obj)));
			} else if (obj instanceof JSONArray) {
				list.add(sortJsonArray(JSONArray.fromObject(obj)));
			} else {
				list.add(obj);
			}
		}

		list.sort((o1, o2) -> o1.toString().compareTo(o2.toString()));
		return JSONArray.fromObject(list);
	}




测试:

String j1 = "{\"group\":[{\"group_id\":\"10408\",\"group_name\":\"\u4e94\u89d2\u573a\u9ec4\u5174\u5e97\",\"last_uptime\":\"2015-05-20 10:39:16\",\"create_time\":\"2015-05-20 10:30:12\"},{\"group_id\":\"10414\",\"group_name\":\"\u95e8\u5e9798131\",\"last_uptime\":\"2015-05-20 10:40:04\",\"create_time\":\"2015-05-20 10:36:03\"}]}";
		String j2 = "{\"group\":[{\"group_id\":\"10408\",\"group_name\":\"\u4e94\u89d2\u573a\u9ec4\u5174\u5e97\",\"last_uptime\":\"2015-05-20 10:39:16\",\"create_time\":\"2015-05-20 10:30:12\"},{\"group_id\":\"10414\",\"group_name\":\"\u95e8\u5e9798131\",\"last_uptime\":\"2015-05-20 10:40:04\",\"create_time\":\"2015-05-20 10:36:03\"}]}";
		String j3 = "{\"group\":[{\"group_id\":\"10414\",\"group_name\":\"\u95e8\u5e9798131\",\"last_uptime\":\"2015-05-20 10:40:04\",\"create_time\":\"2015-05-20 10:36:03\"}, {\"group_id\":\"10408\",\"group_name\":\"\u4e94\u89d2\u573a\u9ec4\u5174\u5e97\",\"last_uptime\":\"2015-05-20 10:39:16\",\"create_time\":\"2015-05-20 10:30:12\"}]}";
		String j4 = "{\"group\":[{\"group_id\":\"10415\",\"group_name\":\"\u95e8\u5e9798131\",\"last_uptime\":\"2015-05-20 10:40:04\",\"create_time\":\"2015-05-20 10:36:03\"}, {\"group_id\":\"10408\",\"group_name\":\"\u4e94\u89d2\u573a\u9ec4\u5174\u5e97\",\"last_uptime\":\"2015-05-20 10:39:16\",\"create_time\":\"2015-05-20 10:30:12\"}]}";
		String j5 = "{\"group\":[{\"group_id\":\"10408\",\"group_name\":\"\u4e94\u89d2\u573a\u9ec4\u5174\u5e97\",\"last_uptime\":\"2015-05-20 10:39:16\",\"create_time\":\"2015-05-20 10:30:12\"}]}";
		String j6 = "{\"group\":[{\"create_time\":\"2015-05-20 10:30:12\",\"group_name\":\"\u4e94\u89d2\u573a\u9ec4\u5174\u5e97\",\"group_id\":\"10408\",\"last_uptime\":\"2015-05-20 10:39:16\"},{\"group_id\":\"10414\",\"last_uptime\":\"2015-05-20 10:40:04\",\"create_time\":\"2015-05-20 10:36:03\",\"group_name\":\"\u95e8\u5e9798131\"}]}";
		JSONObject o1 = JSONObject.fromObject(j1);
		JSONObject o2 = JSONObject.fromObject(j2);
		JSONObject o3 = JSONObject.fromObject(j3);
		JSONObject o4 = JSONObject.fromObject(j4);
		JSONObject o5 = JSONObject.fromObject(j5);
		JSONObject o6 = JSONObject.fromObject(j6);
		JSONArray a1 = o1.getJSONArray("group");
		JSONArray a2 = o2.getJSONArray("group");
		JSONArray a3 = o3.getJSONArray("group");
		JSONArray a4 = o4.getJSONArray("group");
		JSONArray a5 = o5.getJSONArray("group");
		JSONArray a6 = o6.getJSONArray("group");
		System.out.println("a1 和 a2比较: "
				+ CompareUtil.compareJsonArray(a1, a2));
		System.out.println("a1 和 a3比较: "
				+ CompareUtil.compareJsonArray(a1, a3));
		System.out.println("a1 和 a4比较: "
				+ CompareUtil.compareJsonArray(a1, a4));
		System.out.println("a1 和 a5比较: "
				+ CompareUtil.compareJsonArray(a1, a5));
		System.out.println("a1 和 a6比较: "
				+ CompareUtil.compareJsonArray(a1, a6));


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过自定义比较器来实现JSONArrayJSONObject的日期排序。具体步骤如下: 1. 首先,将JSONArray中的JSONObject转换为Java对象,并在Java对象中添加一个日期属性,以便比较。 2. 创建一个自定义比较器类,实现Comparator接口,并重写compare方法,用于比较两个Java对象的日期属性。 3. 使用Collections.sort()方法,将Java对象列表按照日期属性进行排序。 4. 遍历排序后的Java对象列表,并将每个Java对象转换回JSONObject,最终得到排序后的JSONArray。 示例代码如下: ```java // JSONArrayJSONObject排序 JSONArray jsonArray = new JSONArray(); // 添加JSONObject元素 jsonArray.put(new JSONObject("{\"date\":\"2021-01-01\"}")); jsonArray.put(new JSONObject("{\"date\":\"2021-02-01\"}")); jsonArray.put(new JSONObject("{\"date\":\"2021-03-01\"}")); // 将JSONArray中的JSONObject转换为Java对象 List<JSONObject> jsonObjectList = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); jsonObjectList.add(jsonObject); } // 自定义比较器,按照日期属性比较 Comparator<JSONObject> comparator = new Comparator<JSONObject>() { @Override public int compare(JSONObject o1, JSONObject o2) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = sdf.parse(o1.getString("date")); Date date2 = sdf.parse(o2.getString("date")); return date1.compareTo(date2); } catch (Exception e) { e.printStackTrace(); return 0; } } }; // 对Java对象列表进行排序 Collections.sort(jsonObjectList, comparator); // 将Java对象转换回JSONObject JSONArray sortedJsonArray = new JSONArray(); for (JSONObject jsonObject : jsonObjectList) { sortedJsonArray.put(jsonObject); } System.out.println(sortedJsonArray.toString()); ``` 输出结果为: ``` [{"date":"2021-01-01"},{"date":"2021-02-01"},{"date":"2021-03-01"}] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值