解析json

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;

public class JSONConverDG {
	
	public static Map<String,Object> parseObj(List<String> list,int start,int end){
		Map<String,Object> result=new HashMap<>();
		int index=start;
		for(;;){
			if(list.get(index+3).equals("{")){
				int nextIndex= getNextBigKuohao(list, index+3);
				result.put(list.get(index+1), parseObj(list, index+3, nextIndex));
				if(list.get(nextIndex+1).equals(",")){
					index=nextIndex+1;
				}else {
					break;
				}
			}
			else if(list.get(index+3).equals("[")){
				int nextIndex=getNextBigKuohao(list,index+3);
				result.put(list.get(index+1), parseArr(list, index+3,nextIndex));
				if(list.get(nextIndex+1).equals(",")){
					index=nextIndex+1;
				}else{
					break;
				}
			}
			else{
				int nextIndex=index+3;
				result.put(list.get(index+1), list.get(nextIndex));
				if(list.get(nextIndex+1).equals(",")){
					index=nextIndex+1;
				}else{
					break;
				}
			}
		}
		return result;
	}

	private static int getNextBigKuohao(List<String> list,int start) {
		// TODO Auto-generated method stub
		Stack<String> stack=new Stack<>();
		stack.push(list.get(start));
		int index=start+1;
		for(;index<list.size();++index){
			if(list.get(index).equals("]")||list.get(index).equals("}")){
				stack.pop();
			}
			else if(list.get(index).equals("[")||list.get(index).equals("{")){
				stack.push(list.get(index));
			}
			if(stack.isEmpty()){
				break;
			}
		}
		return index;
	}

	private static Object parseArr(List<String> list, int start, int end) {
		// TODO Auto-generated method stub
		int index=start;
		List<Object> arr=new ArrayList<>();
		for(;;){
			if(list.get( index+1).equals("[")){
				int nextIndex= getNextBigKuohao(list,index+1);
				arr.add(parseArr(list, index+1,nextIndex));
				if(list.get( nextIndex+1).equals(",")){
					index=nextIndex+1;
				}else{
					break;
				}
			}
			else if(list.get(index+1).equals("{")){
				int nextIndex= getNextBigKuohao(list, index+1);
				arr.add(parseObj(list, index+1,nextIndex));
				if(list.get(nextIndex+1).equals(",")){
					index=nextIndex+1;
				}else{
					break;
				}
			}
			else{
				arr.add(list.get(index+1));
				if(list.get(index+2).equals(",")){
					index=index+2;
				}else{
					break;
				}
			}
			
		}
		
		
		return arr;
	}

	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str="{name:1,childs:[{name:11,child:{name:21,child:{name:4,childs:[{name:5}]}}},{name:22}],age:3,arr:[[{n:1},{n:2}],12,{n:4}]}";
//		String str="{arr:[[{n:1},{n:2}],12,{n:4}]}";

		List<String> list=new ArrayList<>();
		String last="";
		for(int i=0;i<str.length();++i){
			char c= str.charAt(i);
			if(c=='{'||c=='}'||c==','||c==':'||c=='['||c==']'){
				if(!"".equals(last)){
					list.add(last);
				}
				list.add(String.valueOf(c));
				last="";
			}else{
				last=last+c;
			}
		}
		for(int i=0;i<list.size();++i){
			System.out.println(list.get(i));
		}
		Map<String,Object> m= parseObj(list, 0, list.size()-1);
		System.out.println(m);
	}

	

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章