对多层json排序,

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class JsonSort {

	public static void main(String[] args) {
		String str = "{\"Head\":{\"version\":\"2.0\",\"chnlId\":\"shop\",\"txnTime\":\"20200722113700\",\"txnSeqNo\":\"shop20200722002009\",\"prodNo\":\"01\",\"Sign\":\"aaaaaaaaaaaa\"},\"Body\":{\"orderDesc\":{\"orderDate\":\"20200722\",\"orderId\":\"2020072200001\"},\"subOrder\":[{\"merInnerCd\":\"202007000000033\",\"orgMerOrderId\":\"202007000000000001\",\"subAgreePrice\":[{\"a\":{\"cccc\":\"3333\",\"bbbb\":\"2222\",\"aaaa\":\"1111\"},\"b\":\"2222\",\"c\":\"3333\"},{\"b\":\"111\",\"a\":\"222\"}],\"subPointNum\":\"1\"},{\"merInnerCd\":\"202007000000020\",\"merOrderId\":\"rderId56\",\"orgMerOrderId\":\"20200721090001\",\"subPointNum\":\"2\"},[{\"merInnerCd\":\"202007000000033\",\"orgMerOrderId\":\"202007000000000001\",\"subAgreePrice\":[{\"a\":{\"cccc\":\"3333\",\"bbbb\":\"2222\",\"aaaa\":\"1111\"},\"b\":\"2222\",\"c\":\"3333\"},{\"b\":\"111\",\"a\":\"222\"}],\"subPointNum\":\"1\"},{\"merInnerCd\":\"202007000000020\",\"merOrderId\":\"rderId56\",\"orgMerOrderId\":\"20200721090001\",\"subPointNum\":\"2\"}]],\"a\":\"10\",\"couponAmt\":\"\",\"couponBankAmt\":\"\",\"custId\":\"123456122\",\"pointNum\":\"1\",\"txnAmt\":{\"cccc\":\"3333\",\"bbbb\":\"2222\",\"aaaa\":\"1111\"},\"txnSeqNo\":\"202007722000001\"}}";
		
        //JAR包版本我用的是fastjson-1.2.47.jar
        JSONObject lwsxJson = JSON.parseObject(str);
		String rs = JSON.toJSONString(lwsxJson,SerializerFeature.MapSortField, SerializerFeature.PrettyFormat);
		System.out.println("排序后的lwsxJson>>>" + rs);
	}

}

 

### Java 中多层嵌套列表的排序实现 在 Java 中处理多层嵌套结构并对其进行排序是一项常见的需求。以下是针对该问题的具体解决方法。 #### 方法一:基于 Stream API 的嵌套排序 通过 `Stream` 和其内置函数可以高效地完成多层次数据的排序操作。以下是一个典型的例子: 假设有一个对象模型如下: ```java class Foo { List<Bar> bars; } class Bar { int sort; } ``` 可以通过流式编程对内部嵌套的数据进行逐级排序: ```java listOfFoos.forEach(f -> f.setBars( f.getBars().stream() .sorted(Comparator.comparingInt(o -> o.sort)) .collect(Collectors.toList()) )); ``` 此代码片段实现了对外部列表中的每一个子列表按照指定字段(此处为 `sort` 字段)升序排列的功能[^1]。 --- #### 方法二:利用 FastJSON 进行 Map 转 JSON 并保持顺序 当涉及到更复杂的场景,比如需要将嵌套的键值对转化为有序形式时,FastJSON 提供了一种简单的方式。下面展示了一个实例: 如果原始输入是一串无序的 JSON 数据,则可通过解析成带有序特性的容器再序列化回去达到目的。 ```java String json = "{\"b\":2,\"a\":1}"; Map<String, Object> orderedMap = JSON.parseObject(json, LinkedHashMap.class); System.out.println(JSON.toJSONString(orderedMap)); // 输出 {"a":1,"b":2} ``` 上述方式能够有效保留字典类型的条目次序不变[^2]。 --- #### 方法三:手动遍历与比较器定义 对于更加复杂或者自定义逻辑较多的情况,可能需要显式编写迭代过程以及相应的规则说明文档。考虑这样一个情况——给定一段包含两重关联关系的信息体需依据某些条件重新安排位置的话,我们可以这样做: 假设有这样的 JSON 结构: ```json { "pkequ": "", "picnum": "111", "pkproduct": [ { "id":3 }, { "id":1 } ] } ``` 我们希望将其 pkproduct 数组按 id 升序排列。那么对应的算法应该是这样写的: ```java List<Map<String,Integer>> products=(List<Map<String,Integer>>) jsonObject.get("pkproduct"); Collections.sort(products,(m1,m2)->Integer.valueOf(m1.get("id")).compareTo(Integer.valueOf(m2.get("id")))); ``` 这段脚本展示了如何访问深层节点并通过标准库工具调整它们之间的相对布局[^3]。 --- #### 方法四:整体 JSON 键名排序策略 最后一种情形可能是为了满足特定业务需求而不得不全局范围内统一管理所有的属性名称先后秩序。此时可采用递归技术深入探索每一层分支直至叶子层面为止逐一校正各个部分的位置分布状况直到整个树形图完全符合预期设定为止. 这里给出一个通用框架用于指导此类任务的设计思路: ```java public static void main(String[] args){ String jsonString="{\"c\":\"valueC\",\"a\":{\"d\":\"valueD\",\"b\":\"valueB\"}, \"z\":[{\"y\":9},{\"x\":8}]}"; JSONObject obj=new JSONObject(); try { obj.putAll(sortKeys(new JSONObject(jsonString))); System.out.println(obj.toString()); } catch (JSONException e) {} } private static JSONObject sortKeys(JSONObject unsortedObj)throws JSONException{ ... } ``` 注意这里的省略号代表实际编码细节会因具体环境不同有所差异所以要灵活运用参考资料里提到的技术要点去完善它[^4]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值