mirror of
https://github.com/fangyidong/json-simple.git
synced 2025-12-08 00:10:53 +03:00
improve toString performance
This commit is contained in:
@@ -1,147 +0,0 @@
|
|||||||
/*
|
|
||||||
* $Id: ItemList.java,v 1.1 2006/04/15 14:10:48 platform Exp $
|
|
||||||
* Created on 2006-3-24
|
|
||||||
*/
|
|
||||||
package org.json.simple;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.StringTokenizer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* |a:b:c| => |a|,|b|,|c|
|
|
||||||
* |:| => ||,||
|
|
||||||
* |a:| => |a|,||
|
|
||||||
* @author FangYidong<fangyidong@yahoo.com.cn>
|
|
||||||
*/
|
|
||||||
public class ItemList {
|
|
||||||
private String sp=",";
|
|
||||||
List items=new ArrayList();
|
|
||||||
|
|
||||||
|
|
||||||
public ItemList(){}
|
|
||||||
|
|
||||||
|
|
||||||
public ItemList(String s){
|
|
||||||
this.split(s,sp,items);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemList(String s,String sp){
|
|
||||||
this.sp=s;
|
|
||||||
this.split(s,sp,items);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemList(String s,String sp,boolean isMultiToken){
|
|
||||||
split(s,sp,items,isMultiToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List getItems(){
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] getArray(){
|
|
||||||
return (String[])this.items.toArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void split(String s,String sp,List append,boolean isMultiToken){
|
|
||||||
if(s==null || sp==null)
|
|
||||||
return;
|
|
||||||
if(isMultiToken){
|
|
||||||
StringTokenizer tokens=new StringTokenizer(s,sp);
|
|
||||||
while(tokens.hasMoreTokens()){
|
|
||||||
append.add(tokens.nextToken().trim());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
this.split(s,sp,append);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void split(String s,String sp,List append){
|
|
||||||
if(s==null || sp==null)
|
|
||||||
return;
|
|
||||||
int pos=0;
|
|
||||||
int prevPos=0;
|
|
||||||
do{
|
|
||||||
prevPos=pos;
|
|
||||||
pos=s.indexOf(sp,pos);
|
|
||||||
if(pos==-1)
|
|
||||||
break;
|
|
||||||
append.add(s.substring(prevPos,pos).trim());
|
|
||||||
pos+=sp.length();
|
|
||||||
}while(pos!=-1);
|
|
||||||
append.add(s.substring(prevPos).trim());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSP(String sp){
|
|
||||||
this.sp=sp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void add(int i,String item){
|
|
||||||
if(item==null)
|
|
||||||
return;
|
|
||||||
items.add(i,item.trim());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void add(String item){
|
|
||||||
if(item==null)
|
|
||||||
return;
|
|
||||||
items.add(item.trim());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addAll(ItemList list){
|
|
||||||
items.addAll(list.items);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addAll(String s){
|
|
||||||
this.split(s,sp,items);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addAll(String s,String sp){
|
|
||||||
this.split(s,sp,items);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addAll(String s,String sp,boolean isMultiToken){
|
|
||||||
this.split(s,sp,items,isMultiToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param i 0-based
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public String get(int i){
|
|
||||||
return (String)items.get(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int size(){
|
|
||||||
return items.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString(){
|
|
||||||
return toString(sp);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString(String sp){
|
|
||||||
StringBuffer sb=new StringBuffer();
|
|
||||||
|
|
||||||
for(int i=0;i<items.size();i++){
|
|
||||||
if(i==0)
|
|
||||||
sb.append(items.get(i));
|
|
||||||
else{
|
|
||||||
sb.append(sp);
|
|
||||||
sb.append(items.get(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clear(){
|
|
||||||
items.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void reset(){
|
|
||||||
sp=",";
|
|
||||||
items.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -13,19 +13,21 @@ import java.util.Iterator;
|
|||||||
*/
|
*/
|
||||||
public class JSONArray extends ArrayList {
|
public class JSONArray extends ArrayList {
|
||||||
public String toString(){
|
public String toString(){
|
||||||
ItemList list=new ItemList();
|
|
||||||
|
|
||||||
Iterator iter=iterator();
|
Iterator iter=iterator();
|
||||||
|
|
||||||
|
boolean first = true;
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
sb.append('[');
|
||||||
while(iter.hasNext()){
|
while(iter.hasNext()){
|
||||||
Object value=iter.next();
|
if (first) {
|
||||||
if(value instanceof String){
|
first = false;
|
||||||
list.add("\""+JSONObject.escape((String)value)+"\"");
|
} else {
|
||||||
|
sb.append(',');
|
||||||
}
|
}
|
||||||
else
|
JSONObject.escapeValue(iter.next(), sb);
|
||||||
list.add(String.valueOf(value));
|
|
||||||
}
|
}
|
||||||
return "["+list.toString()+"]";
|
sb.append(']');
|
||||||
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,35 +14,45 @@ import java.util.Map;
|
|||||||
public class JSONObject extends HashMap{
|
public class JSONObject extends HashMap{
|
||||||
|
|
||||||
public String toString(){
|
public String toString(){
|
||||||
ItemList list=new ItemList();
|
|
||||||
Iterator iter=entrySet().iterator();
|
Iterator iter=entrySet().iterator();
|
||||||
|
|
||||||
|
boolean first = true;
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
sb.append('{');
|
||||||
while(iter.hasNext()){
|
while(iter.hasNext()){
|
||||||
|
if (first) {
|
||||||
|
first = false;
|
||||||
|
} else {
|
||||||
|
sb.append(',');
|
||||||
|
}
|
||||||
Map.Entry entry=(Map.Entry)iter.next();
|
Map.Entry entry=(Map.Entry)iter.next();
|
||||||
list.add(toString(entry.getKey().toString(),entry.getValue()));
|
toString(entry.getKey().toString(), entry.getValue(), sb);
|
||||||
}
|
}
|
||||||
return "{"+list.toString()+"}";
|
sb.append('}');
|
||||||
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String toString(String key,Object value){
|
public static String toString(String key, Object value){
|
||||||
StringBuffer sb=new StringBuffer();
|
return toString(key, value, new StringBuffer()).toString();
|
||||||
|
}
|
||||||
|
|
||||||
sb.append("\"");
|
private static StringBuffer toString(String key, Object value, StringBuffer sb){
|
||||||
sb.append(escape(key));
|
sb.append('\"');
|
||||||
|
escape(key, sb);
|
||||||
sb.append("\":");
|
sb.append("\":");
|
||||||
if(value==null){
|
escapeValue(value, sb);
|
||||||
sb.append("null");
|
return sb;
|
||||||
return sb.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(value instanceof String){
|
// Package-protected for JSONArray
|
||||||
sb.append("\"");
|
static void escapeValue(Object value, StringBuffer sb) {
|
||||||
sb.append(escape((String)value));
|
if (value instanceof String){
|
||||||
sb.append("\"");
|
sb.append('\"');
|
||||||
|
escape((String) value, sb);
|
||||||
|
sb.append('\"');
|
||||||
|
} else {
|
||||||
|
sb.append(String.valueOf(value));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
sb.append(value);
|
|
||||||
return sb.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -53,7 +63,13 @@ public class JSONObject extends HashMap{
|
|||||||
public static String escape(String s){
|
public static String escape(String s){
|
||||||
if(s==null)
|
if(s==null)
|
||||||
return null;
|
return null;
|
||||||
StringBuffer sb=new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
|
escape(s, sb);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Package-protected for JSONArray
|
||||||
|
static void escape(String s, StringBuffer sb) {
|
||||||
for(int i=0;i<s.length();i++){
|
for(int i=0;i<s.length();i++){
|
||||||
char ch=s.charAt(i);
|
char ch=s.charAt(i);
|
||||||
switch(ch){
|
switch(ch){
|
||||||
@@ -104,6 +120,5 @@ public class JSONObject extends HashMap{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}//for
|
}//for
|
||||||
return sb.toString();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user