需求:将如下内容的json文件中的内容用文件流读取并转化成List
{
"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242",
"name":"开发组",
"id":"69c382af-8312-11e7-9c1a-fa163e2a6242",
"type":"rolegroup",
"childs":[
{
"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242",
"name":"aa",
"id":"02b99d0c-4aa8-11e8-8f36-fa163e2a6242",
"type":"role"
},
{
"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242",
"name":"测试",
"id":"4a1c4bb1-cf49-11e7-97de-fa163e2a6242",
"type":"role"
},
{
"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242",
"name":"pro_new",
"id":"74ebbe7a-4ab6-11e8-8f36-fa163e2a6242",
"type":"role"
},
{
"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242",
"name":"开发",
"id":"77488250-8312-11e7-9c1a-fa163e2a6242",
"type":"role"
},
{
"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242",
"name":"新",
"id":"d775a9b8-49b9-11e8-8f36-fa163e2a6242",
"type":"role"
}
]
}{
"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242",
"name":"潘怡成学习",
"id":"f39b319f-3b1f-11e9-a8a7-50465d555ba3",
"type":"rolegroup",
"childs":[
{
"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242",
"name":"学习",
"id":"00640d30-3b20-11e9-a8a7-50465d555ba3",
"type":"role"
}
]
}
demo
package com.gisquest.platform.utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.gisquest.platform.common.utils.FileUtils;
public class ParseFile {
public static void parseJonFile() throws IOException {
try {
//读取json文件并转化为list
运行结果
[{subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=开发组, id=69c382af-8312-11e7-9c1a-fa163e2a6242, type=rolegroup, childs=[{"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242","name":"aa","id":"02b99d0c-4aa8-11e8-8f36-fa163e2a6242","type":"role"},{"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242","name":"测试","id":"4a1c4bb1-cf49-11e7-97de-fa163e2a6242","type":"role"},{"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242","name":"pro_new","id":"74ebbe7a-4ab6-11e8-8f36-fa163e2a6242","type":"role"},{"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242","name":"开发","id":"77488250-8312-11e7-9c1a-fa163e2a6242","type":"role"},{"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242","name":"新","id":"d775a9b8-49b9-11e8-8f36-fa163e2a6242","type":"role"}]}, {subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=潘怡成学习, id=f39b319f-3b1f-11e9-a8a7-50465d555ba3, type=rolegroup, childs=[{"subGuid":"491a74fd-8312-11e7-9c1a-fa163e2a6242","name":"学习","id":"00640d30-3b20-11e9-a8a7-50465d555ba3","type":"role"}]}]
分析结果
发现只有外部的的转成Map对象,而内部childs中的数据还是json格式的字符串显示
改进
package com.gisquest.platform.utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.gisquest.platform.common.utils.FileUtils;
public class ParseFile {
public static void parseJonFile() throws IOException {
try {
//读取json文件并转化为list格式
File file = new File("E:\demoFile\智能表单部.json");
String jsonString = FileUtils.readFileToString(file, "UTF-8");
//jsonString结果不是json数组格式的字符串这里需要拼接成json数组格式的字符串
String jsonArrayString = String.format("%s%s%s", "[",jsonString,"]");
List list = JSON.parseArray(jsonArrayString, Map.class);
List> roleGroups = new ArrayList<>();
List> roles = new ArrayList<>();
for (Map map : list) {
String type =String.valueOf(map.get("type"));
if("rolegroup".equals(type)) {
Map group = new HashMap();
group.put("id", map.get("id").toString());
group.put("type", map.get("type").toString());
group.put("name", map.get("name").toString());
group.put("subGuid", map.get("subGuid").toString());
roleGroups.add(group);
if(map.containsKey("childs")) {
String childs = String.valueOf(map.get("childs"));
List listChilds = JSON.parseArray(childs, Map.class);
for (Map map2 : listChilds) {
Map roleMap = new HashMap();
roleMap.put("id", map2.get("id").toString());
roleMap.put("type", map2.get("type").toString());
roleMap.put("name", map2.get("name").toString());
roleMap.put("subGuid", map2.get("subGuid").toString());
roles.add(roleMap);
}
}
}
}
System.out.println(roleGroups.toString());
System.out.println(roles.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
parseJonFile();
}
}
运行显示
[{subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=开发组, id=69c382af-8312-11e7-9c1a-fa163e2a6242, type=rolegroup}, {subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=潘怡成学习, id=f39b319f-3b1f-11e9-a8a7-50465d555ba3, type=rolegroup}]
[{subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=aa, id=02b99d0c-4aa8-11e8-8f36-fa163e2a6242, type=role}, {subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=测试, id=4a1c4bb1-cf49-11e7-97de-fa163e2a6242, type=role}, {subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=pro_new, id=74ebbe7a-4ab6-11e8-8f36-fa163e2a6242, type=role}, {subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=开发, id=77488250-8312-11e7-9c1a-fa163e2a6242, type=role}, {subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=新, id=d775a9b8-49b9-11e8-8f36-fa163e2a6242, type=role}, {subGuid=491a74fd-8312-11e7-9c1a-fa163e2a6242, name=学习, id=00640d30-3b20-11e9-a8a7-50465d555ba3, type=role}]
注意:这里树形结构的json默认只有两种分类roleGroup和role



