将Json协议字符转换到Map

本文介绍了一种解析JSON字符串为Map的方法,并通过递归方式处理嵌套的JSON对象。此外,还提供了一个测试方法来遍历解析后的Map并记录相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
      * 解析Json协议字符到Map
      * 例如:{command:{"content":"value","test":100,"bool":{"Test":true}}}
      * 备注:Value只是基本数据类型或Map<String,Object>类型
      * @param s
      * @return
      */
     @SuppressWarnings ( "unchecked" )
     public static Map<String, Object> parserJsonToMap(String json) {
         Map<String, Object> map = new HashMap<String, Object>();
         JSONObject jsonObject = JSONObject.fromObject(json);
         Iterator<String> keys = jsonObject.keys();
         while (keys.hasNext()) {
             String key = (String) keys.next();
             String value = jsonObject.get(key).toString();
             if (value.startsWith( "{" ) && value.endsWith( "}" )) {
                 map.put(key, parserJsonToMap(value));
             } else {
                 map.put(key, value);
             }
         }
         return map;
     }
 
 
 
 
 
private static Logger LOGGER = org.apache.log4j.Logger.getLogger(ParserJson. class );
 
public static List<String> keyList = new ArrayList<String>();
/**
      * 解析Json Map
      *
      * @param map
      */
     private void parserJsonMapTest(Map<String, Object> map) {
         for (Map.Entry<String, Object> entry : map.entrySet()) {
             keyList.add(entry.getKey());
             if (String. class .isAssignableFrom(entry.getValue().getClass())&&Number. class .isAssignableFrom(entry.getValue().getClass())) {
                 if (LOGGER.isDebugEnabled()) {
                     LOGGER.debug( "CODE:"
                             + keyList.get(keyList.size() - 1 ).hashCode()
                             + " key:" + entry.getKey() + " Value:"
                             + entry.getValue());
                 }
                 keyList.remove(keyList.size() - 1 );
             } else {
                 if (LOGGER.isDebugEnabled()) {
                     LOGGER.debug( "CODE:--->" + keyList.get(keyList.size() - 1 )
                             + " " + keyList.get(keyList.size() - 1 ).hashCode());
                 }
                 // keyList.add(entry.getKey());
                 parserJsonMapInnerTest((Map<String, Object>) entry.getValue());
             }
         }
         keyList.remove(keyList.size() - 1 );
     }
 
     private void parserJsonMapInnerTest(Map<String, Object> map) {
         for (Map.Entry<String, Object> entry : map.entrySet()) {
             keyList.add(entry.getKey());
             if (String. class .isAssignableFrom(entry.getValue().getClass())&&Number. class .isAssignableFrom(entry.getValue().getClass())) {
                 if (LOGGER.isDebugEnabled()) {
                     LOGGER.debug( "CODE:"
                             + keyList.get(keyList.size() - 1 ).hashCode()
                             + " key:" + entry.getKey() + " Value:"
                             + entry.getValue());
                 }
                 keyList.remove(keyList.size() - 1 );
             } else {
                 if (LOGGER.isDebugEnabled()) {
                     LOGGER.debug( "CODE:--->" + keyList.get(keyList.size() - 1 )
                             + " " + keyList.get(keyList.size() - 1 ).hashCode());
                 }
                 // keyList.add(entry.getKey());
                 parserJsonMapInnerTest((Map<String, Object>) entry.getValue());
                 keyList.remove(keyList.size() - 1 );
             }
         }
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值