碰到了一个json转换的问题,以下是测试代码:
List list = new ArrayList();
list.add( "first" );
list.add( "second" );
JSONArray jsonArray2 = JSONArray.fromObject( list );程序执行到这行,JSONArray jsonArray2 = JSONArray.fromObject( list );老是报下面的错误,找了半天也没找到,该引用的包我都引了啊,把源码下载下来debug,也没找到错误java.lang.NoSuchMethodError: java.lang.ThreadLocal.remove()V
net.sf.json.AbstractJSON.removeInstance(AbstractJSON.java:221)
net.sf.json.JSONArray._fromCollection(JSONArray.java:909)
net.sf.json.JSONArray.fromObject(JSONArray.java:118)
net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:105)
net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:84)
caiwu.YsImportServlet.doPost(YsImportServlet.java:78)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
List list = new ArrayList();
list.add( "first" );
list.add( "second" );
JSONArray jsonArray2 = JSONArray.fromObject( list );程序执行到这行,JSONArray jsonArray2 = JSONArray.fromObject( list );老是报下面的错误,找了半天也没找到,该引用的包我都引了啊,把源码下载下来debug,也没找到错误java.lang.NoSuchMethodError: java.lang.ThreadLocal.remove()V
net.sf.json.AbstractJSON.removeInstance(AbstractJSON.java:221)
net.sf.json.JSONArray._fromCollection(JSONArray.java:909)
net.sf.json.JSONArray.fromObject(JSONArray.java:118)
net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:105)
net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:84)
caiwu.YsImportServlet.doPost(YsImportServlet.java:78)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
檢查使用的jar版本間的相容性。
List<String> list = new ArrayList<String>();
jsonArray2.addAll(list)
jsonArray2.addAll(list);
或者
JSONArray.fromObject(list);
都是可以的
commons-httpclient-3.1.jar,commons-collections-3.2.1.jar,morph-1.1.1.jar,
json-lib-2.4-jdk13.jar,ezmorph-1.0.6.jar,commons-logging.jar,commons-lang-2.5.jar
commons-beanutils.jar
把这个包换成1.4或其以上的包试试
Source not found for ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 换了几个jar,也没搞定,着急,期待高人!
list.add( "first" );
list.add( "second" ); JSONArray json = JSONArray.fromObject(list);
PrintWriter out = response.getWriter();
out.print(json);
out.flush();这样放进去试一下,要引用import net.sf.json.JSONArray;
List<Object> list = new ArrayList();
debug那个json-lib源码,最后错误定位在这个方法
protected static void removeInstance( Object instance ) {
Set set = getCycleSet();
set.remove( instance );
if(set.size() == 0) {
cycleSet.remove();
}
}注意这行cycleSet.remove();remove是java.lang.ThreadLocal类的方法,但是jdk1.4中,却没有这个方法的实现,jdk1.5中有这个方法,因此是没问题的
看来jdk1.4是没法用这个json-lib-2.4-jdk13.jar包的,它官网上的这个json-lib-2.4-jdk13.jar根本就存在个bug,汗, 要想在jdk1.4下用,或者改json-lib-2.4-jdk13的源码,或者完善java.lang.ThreadLocal类,让它实现remove方法,不知道各位还有啥高见?