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

    /**
* 判断数据的结构。遍历节点然后去对应的json那边查找是否存在这样的节点
*
* @param root 配置的xml所对应的对Element对象
* @param jsonObject 需要匹配的json字符串对应的json对象
* @return
*/
private boolean constructionCompared(Element root, JSONObject jsonObject) {
boolean f = true;
List<Element> elementList = root.elements();
for (Element element : elementList) {
String key = element.getName();
Object o = jsonObject.get(key);
if (o == null) {
return false;
}
if (o instanceof JSONObject) {
JSONObject t = (JSONObject) o;
f = f && constructionCompared(element, t);
if (f == false) {
return false;
}
} else if (o instanceof JSONArray) {
JSONArray t = (JSONArray) o;
if (t.size() == 0 && element.elements().size() > 0) {
return false;
}
f = f && constructionCompared(element, t.getJSONObject(0));
if (f == false) {
return false;
}
} else {
if (element.elements().size() > 0) {
return false;
}
}
}
return f;
}

测试数据:

json:

{
"unid":"F92933BF937B70976FB1DA330059F7B6",
"pass_device_unid":"41ACB22E9F0D131EFB97C382503E60F6",
"pass_area_unid":"0D77703E4AD042A6FA59807746331821",
"pass_bay_unid":"7AD94DCE176EB10602938BD164E156EC",
"pass_plate_no":"闽C3285W",
"pass_plate_type":"02",
"pass_datetime":"2019-05-26 08:33:10",
"pass_car_speed":"0.0",
"pass_car_length":"0.0",
"pass_plate_color":"H",
"pass_car_type":"K33",
"pass_pic_full_path":"35050001/F92933BF937B70976FB1DA330059F7B61",
"pass_pic_path2":"",
"pass_pic_path3":"",
"pass_car_status":"0",
"pass_car_color":"Z",
"pass_car_brand":"",
"pass_capture_no":"",
"pass_sec_code":"",
"pass_car_dw_index":"40424",
"pass_car_flag":"0",
"pass_create_time":"2019-05-26 08:34:53",
"pass_road_no":"1",
"pass_car_son_brand":"其他",
"pass_car_pic_site":"",
"pass_car_model":"",
"pass_road_to":"0",
"pass_identify_direction":"",
"illegal_code":"0",
"pass_deck":"0"
}

xml:

<root>
<unid>F92933BF937B70976FB1DA330059F7B6</unid>
<pass_device_unid>41ACB22E9F0D131EFB97C382503E60F6</pass_device_unid>
<pass_area_unid>0D77703E4AD042A6FA59807746331821</pass_area_unid>
<pass_bay_unid>7AD94DCE176EB10602938BD164E156EC</pass_bay_unid>
<pass_plate_no>闽C3285W</pass_plate_no>
<pass_plate_type>02</pass_plate_type>
<pass_datetime>2019-05-26 08:33:10</pass_datetime>
<pass_car_speed>0.0</pass_car_speed>
<pass_car_length>0.0</pass_car_length>
<pass_plate_color>H</pass_plate_color>
<pass_car_type>K33</pass_car_type>
<pass_pic_full_path>35050001/F92933BF937B70976FB1DA330059F7B61</pass_pic_full_path>
<pass_pic_path2></pass_pic_path2>
<pass_pic_path3></pass_pic_path3>
<pass_car_status>0</pass_car_status>
<pass_car_color>Z</pass_car_color>
<pass_car_brand></pass_car_brand>
<pass_capture_no></pass_capture_no>
<pass_sec_code></pass_sec_code>
<pass_car_dw_index>40424</pass_car_dw_index>
<pass_car_flag>0</pass_car_flag>
<pass_create_time>2019-05-26 08:34:53</pass_create_time>
<pass_road_no>1</pass_road_no>
<pass_car_son_brand>其他</pass_car_son_brand>
<pass_car_pic_site></pass_car_pic_site>
<pass_car_model></pass_car_model>
<pass_road_to>0</pass_road_to>
<pass_identify_direction></pass_identify_direction>
<illegal_code>0</illegal_code>
<pass_deck>0</pass_deck>
</root>

调用:

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

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. squid4

    主机上的squid一直是傻瓜型使用,yum安装.默认配置.千年不动.突然漏扫出来3.X版本不能用了,搜了下,得升4.神奇的发现centos7的源(阿里源)里面竟然最高只有3.网上搜使用yum装的也都是 ...

  2. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案之使用RTSP流判断摄像机设备是否在线以及快照抓取

    背景分析 熟知EasyNVR产品的小伙伴都知道,通过纯Web化的交互方式,只要配置出摄像机的IP.端口.用户名.密码等信息,就可以将地址进行通道配置完成,即可将设备接入.如果设备支持Onvif协议,E ...

  3. 深入理解Python变量与常量

    深入理解Python变量与常量 变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内 ...

  4. Embarcadero Delphi 7 Lite 7.0.4.453 中文版

    https://www.7down.com/soft/116014.html 软件介绍 Embarcadero Delphi 7精简版 是Windows平台下著名的快速应用程序开发工具(Rapid A ...

  5. 【转】kettle7.1资源库无法打开,找不到connect按钮的问题处理

    转自:https://www.aboutyun.com/home.php?mod=space&uid=71645&do=blog&id=3535 kettle是一个比较好用的E ...

  6. Mac Pro 2015休眠掉电解决办法

    硬件:Mac Pro 2015 系统:MacOs Mojave 10.14.3 问题:合盖的时候,休眠1小时掉电10%,由于之前是128G原装盘不会有这个问题,后面购买了M.2转接卡,更换1T Int ...

  7. 图文讲解Android ImageView的ScaleType

    ScaleType的设置方式包括: 1. 在layout的xml中定义android:scaleType="xxx": 2. 在java代码中调用imageView.setScal ...

  8. 使用vue搭建应用二加入element

    安装使用 element 1.安装 yarn add element-ui 2.使用 (1)在 main.js 中引入 element main.js 为修改 import Vue from 'vue ...

  9. 修改mysql max_allowed_packet 配置

    1:当前默认配置 mysql> show VARIABLES like '%max_allowed_packet%';+--------------------------+---------- ...

  10. PHP ob_gzhandler的理解

    PHP ob_gzhandler的理解那么对于我们这些没有开启mod_deflate模块的主机来说,就只能采用ob_gzhandler函数来压缩了,它的压缩效果和mod_deflate相比,相差很小, ...