结构a
>>结构b1
>>>>结构c1
>>>>>>结构d1
>>>>>>>>结构e1
>>>>>>>>>>结构f1
>>>>>>>>>>结构f2
>>>>>>>>>>结构f3
>>>>>>>>>>结构f4
>>>>结构c2
>>>>>>结构d2
>>>>>>结构d3
>>>>>>结构d4
>>>>结构c2
>>结构b2
将类似这种以“>>”为层级标志的文本转换为json格式数据
{
"levelIndex":0,
"content":"结构a",
"childList":[
{
"levelIndex":1,
"content":"结构b1",
"childList":[
{
"levelIndex":2,
"content":"结构c1",
"childList":[
{
"levelIndex":3,
"content":"结构d1",
"childList":[
{
"levelIndex":4,
"content":"结构e1",
"childList":[
{
"levelIndex":5,
"content":"结构f1",
"childList":[
]
},
{
"levelIndex":5,
"content":"结构f2",
"childList":[
]
},
{
"levelIndex":5,
"content":"结构f3",
"childList":[
]
},
{
"levelIndex":5,
"content":"结构f4",
"childList":[
]
}
]
}
]
}
]
},
{
"levelIndex":2,
"content":"结构c2",
"childList":[
{
"levelIndex":3,
"content":"结构d2",
"childList":[
]
},
{
"levelIndex":3,
"content":"结构d3",
"childList":[
]
},
{
"levelIndex":3,
"content":"结构d4",
"childList":[
]
}
]
},
{
"levelIndex":2,
"content":"结构c2",
"childList":[
]
}
]
},
{
"levelIndex":1,
"content":"结构b2",
"childList":[
]
}
]
}
以自底向上的方式,先对最后一行的子节点向上进行遍历,遍历过程中依次寻找其父亲,直到最后的父节点遍历完。
com.alibaba
fastjson
1.2.4
public class ReadFile {
/**
* 将list中的文本内同存进resultNode中并转换为json格式
* @param list
* @return
*/
public static String contentToJson(List list) {
//resultNode存放得到的父节点
TextNode resultNode = new TextNode();
//创建一个allList列表逆序存放每一个节点
List allList = new ArrayList();
//自底向上从最后一行开始遍历
for (int i = list.size() - 1; i >= 0; i--) {
//存放节点中的List属性
List nowList = new ArrayList();
//当前节点
TextNode textNode = new TextNode();
//默认当前为第0层
textNode.setLevelIndex(0);
//遍历到最后一个节点。就是需要的父节点
if (i == 0) {
resultNode = textNode;
resultNode.setContent(list.get(i));
}
//判断当前节点的层级,每存在一个>>为一级
for (int begin=0,end=2; list.get(i).substring(begin, end).equals(">>"); begin += 2, end += 2) {
textNode.setLevelIndex(end/2);
textNode.setContent(list.get(i).substring(end));
}
//判断节点的父子关系,第一个进来的节点为子节点且没有儿子,所以第一个无需判断
if (i != list.size()-1) {
//已经遍历过的节点存放在allList中,且与list的顺序相反。
//此处j是除当前节点外,已经存放在allList中的节点个数-1
for (int j = list.size() - i - 2; j >= 0; j--) {
//如果节点的层级比期上一个节点大,则当前节点无子节点
if (textNode.getLevelIndex() - allList.get(j).getLevelIndex() >= 0) {
break;
}
//临近节点中比当前节点层级多1的都是当前节点的子节点
if (textNode.getLevelIndex() - allList.get(j).getLevelIndex() == -1) {
nowList.add(allList.get(j));
}
}
}
textNode.setChildList(nowList);
allList.add(textNode);
}
return JSON.toJSONString(resultNode);
}
public static void main(String[] arg){
//读取文档内容到list
String filePath = "D:\\Files\\Desktop\\test1.txt";
List list = readTxtFile(filePath);
//把list放入textNode并转换为json字符串
String result = contentToJson(list);
System.out.println(result);
}
}