我自己做了个小例子, 关于json往servlet中传值,然后在后台代码中解析提取键值,出错了,提示
net.sf.json.JSONException: JSONObject["name"] not found.
net.sf.json.JSONObject.get(JSONObject.java:1449)
net.sf.json.JSONObject.getString(JSONObject.java:1570)
com.my.servlet.Action.doGet(Action.java:30)
com.my.servlet.Action.doPost(Action.java:39)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
这个键值我是存在的,包都加了。不知道错在哪了
页面代码:
function servletJson()
 {
 
   var str = '{ "name": "Violet", "occupation": "character" }';  
   alert(str);
   
    var form = document.getElementById("formName");
    form.action="SpringCodeTest1?jsondate="+str ;
    form.submit();
    
    
 }
  </script>
        <form id="formName" method="post">
        
              <input type="button" value="提交json数据到后台" onClick="servletJson()">
        
        </form>servlet中代码:public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

System.out.println("d0get");
String s3 = request.getParameter("jsondate");
System.out.println("::::::::"+s3);
//解析json数据,加载所有需要的包
JSONObject jsonObj = new JSONObject(); 
//获取key,得到value的值
System.out.println(jsonObj.getString("model"));   
        System.out.println(jsonObj.getInt("year"));     
}
我认为这句有问题JSONObject jsonObj = new JSONObject(); 
应该吧JSONObject jsonObj = new JSONObject(s3 ); 
但是编译不过去,提示错误

解决方案 »

  1.   

    应该是这样吧
    var str = '{ \"name\": \"Violet\", \"occupation\": \"character\" }';
      

  2.   

    2楼的办法,出了新的错误:
    javax.servlet.ServletException: Servlet execution threw an exception
    root cause java.lang.NoClassDefFoundError: org/apache/commons/collections/map/MultiKeyMap
    net.sf.json.JsonConfig.<init>(JsonConfig.java:61)
    net.sf.json.JsonConfig.<clinit>(JsonConfig.java:46)
    net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:691)
    net.sf.json.JSONObject._fromString(JSONObject.java:919)
    net.sf.json.JSONObject.fromString(JSONObject.java:270)
    com.my.servlet.Action.doGet(Action.java:29)
    com.my.servlet.Action.doPost(Action.java:41)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
      

  3.   

      var str = '{ name: "Violet", occupation: "character" }';  
    这样呢??
      

  4.   

    还是报错:
    :::::::{ name: "Violet", occupation: "character" }
    2009-6-2 17:50:25 org.apache.catalina.core.StandardWrapperValve invoke
    严重: Servlet.service() for servlet SpringCodeTest2 threw exception
    java.lang.NoClassDefFoundError: org/apache/commons/collections/map/MultiKeyMap
    at net.sf.json.JsonConfig.<init>(JsonConfig.java:61)
    at net.sf.json.JsonConfig.<clinit>(JsonConfig.java:46)
    at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:691)
      

  5.   

    这个是没有找到类吧,把common-collections.jar放入classpath中
      

  6.   

    { name: "Violet", occupation: "character" } 这样是绝对正确的然后记得把需要加的jar包加上
      

  7.   

    还是不行
    页面:var str = '{ name: "Violet", occupation: "character" }';  
    后台:
    String s3 = request.getParameter("jsondate");
    JSONObject jsonObj = new JSONObject(); 
    jsonObj.fromString(s3);//这行显示横线,貌似不支持
    执行后报错:
    java.lang.NoClassDefFoundError
    at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:691)
    at net.sf.json.JSONObject._fromString(JSONObject.java:919)
    at net.sf.json.JSONObject.fromString(JSONObject.java:270)
    包都加了啊