碰到了一个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)

解决方案 »

  1.   

    java.lang.NoSuchMethodError: java.lang.ThreadLocal.remove()V
    檢查使用的jar版本間的相容性。
      

  2.   

    谢谢kebin0001,我也觉得可能是jar包的问题,我jdk是1.4的,json-lib下的是jdk13的,其他几个jar包也都下了,可能是哪个jar包有问题呢?
      

  3.   

    我用 jdk1.5 json-lib-2.3-jdk13 ezmorph-1.6.1运行正常
      

  4.   

    你要先用泛形吧。
    List<String> list = new ArrayList<String>(); 
      

  5.   

    可以直接将值放在JSONArray里面,
    jsonArray2.addAll(list)
      

  6.   

    json-lib-2.2.2-jdk15.jar
    jsonArray2.addAll(list);
    或者 
    JSONArray.fromObject(list);
    都是可以的
      

  7.   

    谢谢大家,不过除了kebin0001,都说的不是解决方法啊,现在想知道哪个jar包可能有问题呢
      

  8.   

    我jdk1.4的,下的jar包分别为
    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
      

  9.   

    json-lib-2.4-jdk13.jar
    把这个包换成1.4或其以上的包试试
      

  10.   

    回复yaoweijq,json-lib就两个版本,一个是1.5,一个就是我下载的这个,我下的是可以兼容1.4的,这个包肯定不会有问题的
      

  11.   

    debug的时候,老报这个错误
    Source not found for ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 换了几个jar,也没搞定,着急,期待高人!
      

  12.   

             List list = new ArrayList();   
            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;
      

  13.   

    不好意思,json传值要以Object对象吧
      List<Object> list = new ArrayList();   
      

  14.   

    经过不懈努力,知道问题出在哪里了,分享下:
    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中有这个方法,因此是没问题的
      

  15.   

    总结下:
    看来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方法,不知道各位还有啥高见? 
      

  16.   

    若必须用jdk1.4,请问楼主如何解决啊?