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);
}
}