手动撸了个 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);
}

最新文章

  1. Android开发之Android Material Design Toolbar自定义随笔
  2. windows上如何搭建Git Server
  3. Neural Network学习(一) 最早的感知机:Perceptron of Rosenblatt
  4. 介绍开源的.net通信框架NetworkComms框架之三 传递List
  5. Sublime Text 3 插件安装及Vim 模式设置
  6. Java性能优化权威指南-读书笔记(五)-JVM性能调优-吞吐量
  7. (转)理想化的 Redis 集群
  8. IOS-UI-UIDynamic(二)
  9. underscorejs-each学习
  10. Write the code.Change the world.---WWDC2014
  11. ZOJ 3702 Gibonacci number
  12. OpenCASCADE 参数曲线曲面面积
  13. QQ邮箱开启SMTP服务的步骤
  14. 最大子矩阵和问题dp
  15. CMMI摘要
  16. numpy中的方差、协方差、相关系数
  17. android 环境的配置
  18. 安装VNC
  19. python中编码问题
  20. Nginx的安装(CentOS 7环境)

热门文章

  1. WebGL学习笔记(九):阴影
  2. Hadoop深入学习之HA
  3. vue项目.eslintrc格式化
  4. 从原生Android 跳转到hbuilder项目
  5. IBM X3650 M4 M5 设置服务器用UEFI模式启动支持磁盘GPT分区
  6. 解决org.springframework.dao.DeadlockLoserDataAccessException
  7. Vue脚手架菜鸟级错误 npm run dev
  8. Kubernetes k8s 基于Docker For Windows
  9. 修改IP地址之后认证信息问题
  10. IDEA和JIRA任务联动(redmine同理)