多级嵌套JSON转TreeMap做验签


highlight: arduino-light

```java package com.yl.box.util;

import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.parser.Feature;

import java.util.*;

public class JsonUtils {

/**
 * 应用场景:Json 排序
 *
 * @param jsonStr JSON字符串
 */
public static Map<String, Object> jsonToMap(String jsonStr) {
    Map<String, Object> treeMap = new TreeMap();
    //
    JSONObject json = JSONObject.parseObject(jsonStr, Feature.OrderedField);
    Iterator<String> keys = json.keySet().iterator();
    while (keys.hasNext()) {
        String key = keys.next();
        Object value = json.get(key);
        //判断传入kay-value中是否含有&#34;&#34; 或null
        if (json.get(key) == null || value == null) {
            //当JSON字符串存在null时,不将该kay-value放入Map中,即显示的结果不包括该kay-value
            continue;
        }
        // 判断是否为JSONArray(json数组)
        if (value instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) value;
            List<Object> arrayList = new ArrayList<>();
            for (Object object : jsonArray) {
                // 判断是否为JSONObject&#xff0c;如果是 转化成TreeMap
                if (object instanceof JSONObject) {
                    object = jsonToMap(object.toString());
                }
                arrayList.add(object);
            }
            treeMap.put(key, arrayList);
        } else {
            //判断该JSON中是否嵌套JSON
            boolean flag = isJSONValid(value.toString());
            if (flag) {
                //若嵌套json了,通过递归再对嵌套的json(即子json)进行排序
                value = jsonToMap(value.toString());
            }
            // 其他基础类型直接放入treeMap
            // JSONObject可进行再次解析转换
            treeMap.put(key, value);
        }
    }
    return treeMap;
}


/**
 * 校验是否是json字符串
 */
public final static boolean isJSONValid(String json) {
    try {
        if (null == JSONObject.parseObject(json)) {
            return false;
        }
    } catch (Exception ex) {
        return false;
    }
    return true;
}

} ```

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值