cn.hutool

XmlUtil 工具类提供读写 xml

  1. maven

    1
    2
    3
    4
    5
    <dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.3.5</version>
    </dependency>
  2. 读取 XML 文件

    1
    2
    Document document = XmlUtil.readXML("/Users/mac126/Desktop/text.xml");
    String xml = XmlUtil.toStr(document);

org.json

xml 字符串转 JSONObject

  1. Maven

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160212</version>
    </dependency>
  2. Xml 字符串转 JSONObject

    1
    2
    3
    4
    5
    //xml 为 字符串
    JSONObject jsonObject = XML.toJSONObject(xml);

    //Organization 为根元素,获取其子元素内容
    String organization = jsonObject.get("Organization").toString();

问题

json 字符串中有些 key 对应的 value 既可能为 json 也可能为 jsonarray,需要统一转换为jsonarray,才能转换到 javabean

  1. 获取 jsonstring

    1
    2
    ////object 为 JSONObject
    String department = object.get("Device").toString();
  2. string 前后加中括号得到 newstring:"[" + string + "]"

  3. newstring 转 jsonarray

    1
    2
    3
    4
    //department 为原 json 字符串
    if(!"".equals(department) && department.startsWith("{")) {
    object.put("Device", JSON.parseArray("[" + department + "]"));
    }

其它工具

net.sf.json

标签的属性会加上前缀 @符号

  1. 代码

    1
    2
    3
    XMLSerializer xmlSerializer = new XMLSerializer(); 
    JSON json = xmlSerializer.read(xml);
    System.out.println(json);
  2. xml 示例

    1
    2
    3
    4
    <student name="zhangsan">
    <sex>man</sex>
    <age>18</age>
    </student>
  3. 转换后

    1
    {"@name":"zhangsan","sex":"man","age":"18"}

示例参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
JSONObject jsonObject_Organization = XML.toJSONObject(xml);
String organization = jsonObject_Organization.get("Organization").toString();
com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(organization);

String devices = jsonObject.get("Devices").toString();
com.alibaba.fastjson.JSONObject jsonObject_devices = JSON.parseObject(devices);
String device = jsonObject_devices.get("Device").toString();
deviceList = JSON.parseArray(device, Device.class);
for (Device d : deviceList) {
deviceMap.put(d.getId(), d);
}

String department = jsonObject.get("Department").toString();
com.alibaba.fastjson.JSONObject jsonObject_department = JSON.parseObject(department);

//市公安局
String department_root_str = jsonObject_department.get("Department").toString();
com.alibaba.fastjson.JSONObject department_root_jsonobject = JSON.parseObject(department_root_str);

//各分局
String department_child = department_root_jsonobject.get("Department").toString();
JSONArray objects = JSON.parseArray(department_child);
for (int i = 0; i < objects.size(); i++) {
com.alibaba.fastjson.JSONObject object = objects.getJSONObject(i);
if (object.get("Department") != null) {
String department1 = object.get("Department").toString();
if(!"".equals(department1) && department1.startsWith("{")) {
object.put("Department", JSON.parseArray("[" + department1 + "]"));
}
}
if (object.get("Device") != null) {
String department1 = object.get("Device").toString();
if(!"".equals(department1) && department1.startsWith("{")) {
object.put("Device", JSON.parseArray("[" + department1 + "]"));
}
}
if (object.get("Channel") != null) {
String department1 = object.get("Channel").toString();
if(!"".equals(department1) && department1.startsWith("{")) {
object.put("Channel", JSON.parseArray("[" + department1 + "]"));
}
}
}
//市公安局-处理后
department_root_jsonobject.put("Department", objects);
Department department_root = JSON.parseObject(department_root_jsonobject.toJSONString(), Department.class);

//市公安局-下设备
all.addAll(getVideoListFromDepartment(department_root));

//分局
List<Department> department1 = department_root.getDepartment();
for (Department d : department1) {
all.addAll(getVideoListFromDepartment(d));

//派出所等
List<Department> department2 = d.getDepartment();
if(department2 != null && department2.size() > 0) {
for (Department department3 : department2) {
all.addAll(getVideoListFromDepartment(department3));
}
}
}