xml转复杂json,遍历值键对转成map集合 。

一、由xml格式数据转成json,遍历json对象 ,并返回map的一套完整流程,可根据自己需求改变。返回map可定义全局变量

测试mian方法:

public static void main(String[] args) throws JDOMException, IOException {

  //xml格式字符串  
        String xml="<?xml version=\"1.0\" encoding=\"UTF-8\" ?><root><TcpCont><MvnoID>SJHL01</MvnoID><InterfaceCode>Svc_ProvisionRet</InterfaceCode><MessageID>SJHL01201808090058195645</MessageID><RspTime>20180809005825</RspTime><RspCode>002</RspCode><Token>66905acba6fb790bf6fe9ef2582636c6581810f9439e14d6963217f802785913</Token></TcpCont><SvcRetCont><BusiRet><RetCode>0000</RetCode><RetDesc>处理成功</RetDesc><DoneCode>2000000022012604</DoneCode></BusiRet></SvcRetCont></root>";
      //转成json对象
            JSONObject jsonobject=xml2JSON(xml.replace("UTF-8","utf-8").getBytes());
           System.out.println(jsonobject);
           Map mapjson=JsonOps.json2Map(jsonobject.toJSONString());
          System.out.println(mapjson);
           json转成map
          JsonMap(jsonobject);

}

 

//解析json遍历
    public static void JsonMap(JSONObject jsonobject) {
          Set<String> keySet = jsonobject.keySet();
          Map<Object, Object> map = new HashMap<Object, Object>(keySet.size());
          System.out.println("key++"+keySet);
          for (String key : keySet) {
              map.put(key, jsonobject.get(key));
              JSONObject j = (JSONObject) JSON.toJSON(map);
              Object json = JSON.toJSON(j.get(key));
              System.out.println(key+"===="+json);
              //判断遍历出来的是数组还是啥
              if (json instanceof JSONArray) {
                  System.out.println("是json数组");
                  jsonArrayToMap((JSONArray) json);
                 
              } else if (json instanceof JSONObject) {
                   System.out.println("是JSONObject");
                  JSONObject object = (JSONObject) JSON.toJSON(json);

    递归处理对象  是对象继续遍历  直到遍历出数组
                  JsonMap(object);
                 
              } else {
                  System.out.println("是map");
                  // 不是json数组则为key添加值

           //其实我感觉可以不用这一步
              }
          }
    }

是数组 做特殊处理 有用json对象值是以数组方式存在  所以最后都是返回数组

public static void jsonArrayToMap(JSONArray jsonArray) {
            for (int i = 0; i < jsonArray.size(); i++) {
                     JSONObject jsonObject = (JSONObject) jsonArray.get(i);
                         // 继续遍历
                         for (String key : jsonObject.keySet()) {
                         // Element addElement = childrenElement.addElement(key);
                             Object arry = JSON.toJSON(jsonObject.get(key));
                             if (arry instanceof JSONArray) {
                                 // 递归

                            //这里为什么要try呢因为对象里数组和  值都是数组 这边用于判断是否继续遍历  值是数组是不需要遍历的
                                 try {
                                     JSONArray jsonObject2 = (JSONArray) arry;
                                      jsonArrayToMap((JSONArray) arry);
                                } catch (Exception e) {
                                    System.out.println(key+"=="+arry);

            //这里是最后的答案  可以已开始放入map集合了  这里我就没有放入了,


                                }
                             } else {
                                 System.out.println(key+"="+arry);
                             }
                    }
                
            }
        }

 

 

    
    /**
     * xml转换成json
     */
    public static JSONObject xml2JSON(byte[] xml) throws JDOMException, IOException {
        JSONObject json = new JSONObject();
        InputStream is = new ByteArrayInputStream(xml);
        SAXBuilder sb = new SAXBuilder();
        org.jdom2.Document doc = sb.build(is);
        Element root = doc.getRootElement();
        json.put(root.getName(), iterateElement(root));
        return json;
      }
      
    private static JSONObject iterateElement(Element element) {
        List node = element.getChildren();
        Element et = null;
        JSONObject obj = new JSONObject();
        List list = null;
        for (int i = 0; i < node.size(); i++) {
          list = new LinkedList();
          et = (Element) node.get(i);
          if (et.getTextTrim().equals("")) {
            if (et.getChildren().size() == 0)
              continue;
            if (obj.containsKey(et.getName())) {
              list = (List) obj.get(et.getName());
            }
            list.add(iterateElement(et));
            obj.put(et.getName(), list);
          } else {
            if (obj.containsKey(et.getName())) {
              list = (List) obj.get(et.getName());
            }
            list.add(et.getTextTrim());
            obj.put(et.getName(), list);
          }
        }
        return obj;
      }
      
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值