All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.eshore.tools.SimpleJson Maven / Gradle / Ivy

There is a newer version: 2.0.3
Show newest version
package com.eshore.tools;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 一个高效的简单的json 解析工具
 * 整个解析实现在200行代码内
 * @author eshore
 *
 */
public class SimpleJson {
	Object lv[]=new Object [10];//层级的值
	String lk[]=new String [10];//层级名称
	int lt[]=new int [10];//层级类型
	int maxDeep=10;
	
	public static SimpleJson parse(String str){
		SimpleJson sj = new SimpleJson();
		sj.fromString(str);
		return sj;
	}
	
	public SimpleJson(){}
	
	/**
	 * 
	 * @param deep 支持最大的层级,默认是10
	 */
	public SimpleJson(int deep){
		 lv =new Object [deep];//层级的值
		 lk =new String [deep];//层级名称
		 lt =new int [deep];//层级类型
		 maxDeep=deep;
	}
	
	/**
	 * 获取根
	 * @return root
	 */
	public Object getRoot(){
		return lv[0];
	}
	
	/**
	 * 从字符串解析JSON
	 * @param str text
	 */
  public	void fromString(String str){
		int level=0;
		int flag=0;
		String name=null;
		while(flag0){
			if(lt[level-1]==0){
				((Map)lv[level-1]).put(name, obj);
			}else{
				((List)lv[level-1]).add(obj);
			}
		}
	}
	
	/**
	 * 添加Array值
	 * @param level leval
	 * @param obj value
	 * @param name key
	 */
	private void add(int level,List obj,String name){
		lv[level]=obj;
		lk[level]=name;
		lt[level]=1;
		if(level>0){
			if(lt[level-1]==0){
				((Map)lv[level-1]).put(name, obj);
			}else{
				((List)lv[level-1]).add(obj);
			}
		}
	}
	
	/**
	 * 添加字符值
	 * @param level leval
	 * @param obj value
	 * @param name key
	 */
	private void add(int level,String obj,String name){
		if(level>0){
			if(lt[level-1]==0){
				((Map)lv[level-1]).put(name, obj);
			}else{
				((List)lv[level-1]).add(obj);
			}
		}
	}
	
	

	/**
	 * 读到的长度
	 */
	private int tmp_read_len=0;
	/**
	 * 读一段字符串到stop char 时停止
	 * 以"或' 开头的读到配对的"或'.否则就以空格或逗号]}结束
	 * @param str source string
	 * @param off offset 
	 * @return value
	 */
	private String readString(String str,int off){
		tmp_read_len=0;
		int i=off;
		char stop=' ';
		char firstChar=str.charAt(off);
		if(firstChar=='"'||firstChar=='\''){
			stop=firstChar;
			off=i=i+1;
		}
		char lc=0;//上一个字符
		//是否存在换行符转义,json-line 数据很有必要
		boolean hasReturnWord=false;
		for(;ilevel)return;
		int newDeep=maxDeep*2;
		Object lv_[]=new Object [newDeep];
		int lt_[]=new int [newDeep];
		String lk_[]=new String [newDeep];
		System.arraycopy(lv, 0, lv_, 0, lv.length);
		System.arraycopy(lt, 0, lt_, 0, lt.length);
		System.arraycopy(lk, 0, lk_, 0, lk.length);
		lv=lv_;
		lk=lk_;
		lt=lt_;
		maxDeep=newDeep;
	}
	
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy