手动撸了个 xml 和 json 格式匹配的代码。

  1. /**
  2. * 判断数据的结构。遍历节点然后去对应的json那边查找是否存在这样的节点
  3. *
  4. * @param root 配置的xml所对应的对Element对象
  5. * @param jsonObject 需要匹配的json字符串对应的json对象
  6. * @return
  7. */
  8. private boolean constructionCompared(Element root, JSONObject jsonObject) {
  9. boolean f = true;
  10. List<Element> elementList = root.elements();
  11. for (Element element : elementList) {
  12. String key = element.getName();
  13. Object o = jsonObject.get(key);
  14. if (o == null) {
  15. return false;
  16. }
  17. if (o instanceof JSONObject) {
  18. JSONObject t = (JSONObject) o;
  19. f = f && constructionCompared(element, t);
  20. if (f == false) {
  21. return false;
  22. }
  23. } else if (o instanceof JSONArray) {
  24. JSONArray t = (JSONArray) o;
  25. if (t.size() == 0 && element.elements().size() > 0) {
  26. return false;
  27. }
  28. f = f && constructionCompared(element, t.getJSONObject(0));
  29. if (f == false) {
  30. return false;
  31. }
  32. } else {
  33. if (element.elements().size() > 0) {
  34. return false;
  35. }
  36. }
  37. }
  38. return f;
  39. }

测试数据:

json:

  1. {
  2. "unid":"F92933BF937B70976FB1DA330059F7B6",
  3. "pass_device_unid":"41ACB22E9F0D131EFB97C382503E60F6",
  4. "pass_area_unid":"0D77703E4AD042A6FA59807746331821",
  5. "pass_bay_unid":"7AD94DCE176EB10602938BD164E156EC",
  6. "pass_plate_no":"闽C3285W",
  7. "pass_plate_type":"02",
  8. "pass_datetime":"2019-05-26 08:33:10",
  9. "pass_car_speed":"0.0",
  10. "pass_car_length":"0.0",
  11. "pass_plate_color":"H",
  12. "pass_car_type":"K33",
  13. "pass_pic_full_path":"35050001/F92933BF937B70976FB1DA330059F7B61",
  14. "pass_pic_path2":"",
  15. "pass_pic_path3":"",
  16. "pass_car_status":"0",
  17. "pass_car_color":"Z",
  18. "pass_car_brand":"",
  19. "pass_capture_no":"",
  20. "pass_sec_code":"",
  21. "pass_car_dw_index":"40424",
  22. "pass_car_flag":"0",
  23. "pass_create_time":"2019-05-26 08:34:53",
  24. "pass_road_no":"1",
  25. "pass_car_son_brand":"其他",
  26. "pass_car_pic_site":"",
  27. "pass_car_model":"",
  28. "pass_road_to":"0",
  29. "pass_identify_direction":"",
  30. "illegal_code":"0",
  31. "pass_deck":"0"
  32. }

xml:

  1. <root>
  2. <unid>F92933BF937B70976FB1DA330059F7B6</unid>
  3. <pass_device_unid>41ACB22E9F0D131EFB97C382503E60F6</pass_device_unid>
  4. <pass_area_unid>0D77703E4AD042A6FA59807746331821</pass_area_unid>
  5. <pass_bay_unid>7AD94DCE176EB10602938BD164E156EC</pass_bay_unid>
  6. <pass_plate_no>闽C3285W</pass_plate_no>
  7. <pass_plate_type>02</pass_plate_type>
  8. <pass_datetime>2019-05-26 08:33:10</pass_datetime>
  9. <pass_car_speed>0.0</pass_car_speed>
  10. <pass_car_length>0.0</pass_car_length>
  11. <pass_plate_color>H</pass_plate_color>
  12. <pass_car_type>K33</pass_car_type>
  13. <pass_pic_full_path>35050001/F92933BF937B70976FB1DA330059F7B61</pass_pic_full_path>
  14. <pass_pic_path2></pass_pic_path2>
  15. <pass_pic_path3></pass_pic_path3>
  16. <pass_car_status>0</pass_car_status>
  17. <pass_car_color>Z</pass_car_color>
  18. <pass_car_brand></pass_car_brand>
  19. <pass_capture_no></pass_capture_no>
  20. <pass_sec_code></pass_sec_code>
  21. <pass_car_dw_index>40424</pass_car_dw_index>
  22. <pass_car_flag>0</pass_car_flag>
  23. <pass_create_time>2019-05-26 08:34:53</pass_create_time>
  24. <pass_road_no>1</pass_road_no>
  25. <pass_car_son_brand>其他</pass_car_son_brand>
  26. <pass_car_pic_site></pass_car_pic_site>
  27. <pass_car_model></pass_car_model>
  28. <pass_road_to>0</pass_road_to>
  29. <pass_identify_direction></pass_identify_direction>
  30. <illegal_code>0</illegal_code>
  31. <pass_deck>0</pass_deck>
  32. </root>

调用:

  1. public void dataCheckTest(Map<String, Object> params) throws Exception {
  2. String xml = String.valueOf(params.get("xml"));
  3. String json = String.valueOf(params.get("json"));
  4. JSONObject jsonObject = JSONObject.parseObject(json);
  5. Document document = DocumentHelper.parseText(xml);
  6. Element root = document.getRootElement();
  7. boolean b = constructionCompared(root, jsonObject);
  8. System.out.println(b);
  9. }

xml和json的判断格式是否相等的更多相关文章

  1. SpringBoot RestController 同时支持返回xml和json格式数据

    @RestController 默认支持返回json格式数据,即使不做任何配置也能返回json数据 当接口需要支持xml或json两种格式数据时应该怎么做呢? 只要引入 Jackson xml的 ma ...

  2. 【.net 深呼吸】聊聊WCF服务返回XML或JSON格式数据

    有时候,为了让数据可以“跨国经营”,尤其是HTTP Web有关的东东,会将数据内容以 XML 或 JSON 的格式返回,这样一来,不管客户端平台是四大文明古国,还是处于蒙昧时代的原始部落,都可以使用这 ...

  3. 使用CJSON库实现XML与JSON格式的相互转化

    之前完成了一个两个平台对接的项目.由于这两个平台一个是使用json格式的数据,一个是使用xml格式的数据,要实现它们二者的对接就涉及到这两个数据格式的转化,在查阅相关资料的时候发现了这个CJSON库, ...

  4. Java 常见数据交换格式——xml、json、yaml

    目录 数据交换格式介绍 XML 使用DOM方式解析 使用SAX方式解析 使用DOM4J方式解析 使用JDOM方式解析 JSON 使用JSONObject方式将数据转换为JSON格式 利用JSONObj ...

  5. C#对XML、JSON等格式的解析

    C#对XML.JSON等格式的解析 一.C#对XML格式数据的解析 1.用XMLDocument来解析 XmlDocument xmlDocument = new XmlDocument(); xml ...

  6. 常用两种数据交换格式之XML和JSON的比较

    目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...

  7. java XML转JSON格式

    标签: XML转Json json 2014-05-20 20:55 6568人阅读 评论(6) 收藏 举报  分类: [J2SE基础](20)  代码如下所示,从这个例子中发现了代码库的重要性,如果 ...

  8. XML和JSON两种数据交换格式的比较

    在web开发领域,主要的数据交换格式有XML和JSON,对于在 Ajax开发中,是选择XML还是JSON,一直存在着争议,个人还是比较倾向于JSON的.一般都输出Json不输出xml,原因就是因为 x ...

  9. xml转换为json格式时,如何将指定节点转换成数组 Json.NET

    使用Json.NET转换xml成json时,如果xml只有单个节点,但json要求是数组形式[], JsonConvert.SerializeXmlNode 并不能自动识别 示例如下: RecordA ...

随机推荐

  1. 图解 https 单向认证和双向认证!

    来源: 一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明 ...

  2. weixin-js-sdk

    场景:在h5移动端,实现分享朋友,分享朋友圈. 插曲:一开始我认为是不能做到分享的,主要是我从微信小程序的角度出发的,想着微信小程序都做不到分享朋友圈功能,那h5就更不能实现了,导致出现了错误的判断. ...

  3. (原)关于使用zoompad滤镜生成一个转场效果

    之前在 http://bbs.chinaffmpeg.com/forum.php?mod=viewthread&tid=1294&extra=page%3D1 上分享过一个转场效果,今 ...

  4. /home/jdk1.8.0_211/jre/bin/java: Permission denied

    在Linux上安装JDK后启动tomcat 日志中提示  /home/jdk1.8.0_211/jre/bin/java: Permission denied 原因是:运行的命令在这个路径下没有权限 ...

  5. windows下ffmpeg批量转码

    以mp4转mp3为例 for %%i in (*.mp4) do ffmpeg -i "%%i" "%%i.mp3" 将当前文件夹下的mp4文件全部转码为mp3

  6. Windows SVN迁移到Linux 服务器

    一.备份VisualSVN项目 1. 现在要使用Linux作为svn服务器,之前是在windows Server 2008上的,用的是VisualSVN, 如下图所示. 2. 现在svn中有一个项目f ...

  7. 【ML基础】t-SNE(t-distributed stochastic neighbor embedding)原理及推导

    前言 参考 1. t-SNE原理与推导: 完

  8. LeetCode70——爬楼梯

    题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...

  9. JS实现文字转语音播放

    JS实现文字转语音播放背景实现方式第一种:百度文字转语音开放API第二种:微软TTS语音引擎第三种:SpeechSynthesisUtterance总结背景在做项目的过程中,经常会遇到场景是客户要求播 ...

  10. 007 SpringCloud 学习笔记3-----Eureka注册中心

    1.Eureka概述 (1)引子 网约车出现以前,人们出门叫车只能叫出租车.一些私家车想做出租却没有资格,被称为黑车.而很多人想要约车,但是无奈出租车太少,不方便.私家车很多却不敢拦,而且满大街的车, ...