GVKun编程网logo

ssh与ajax结合之json异常:org.apache.struts2.json.JSONException(ssh ajax)

6

本文将为您提供关于ssh与ajax结合之json异常:org.apache.struts2.json.JSONException的详细介绍,我们还将为您解释sshajax的相关知识,同时,我们还将为您

本文将为您提供关于ssh与ajax结合之json异常:org.apache.struts2.json.JSONException的详细介绍,我们还将为您解释ssh ajax的相关知识,同时,我们还将为您提供关于ajax请求json格式的数据,在经过interceptor时出现JSONException、android – 从url解析JSON,异常:解析数据时出错org.json.JSONException:字符115处的未终止数组、com.alibaba.fastjson.JSONException: syntax error, pos 6, json : 这个 json 报错怎么整??、E / VOLLEY:org.json.JSONException:值 的实用信息。

本文目录一览:

ssh与ajax结合之json异常:org.apache.struts2.json.JSONException(ssh ajax)

ssh与ajax结合之json异常:org.apache.struts2.json.JSONException(ssh ajax)


+=======================

注意看红色字体,对你有帮助,吓到我赶紧去吃个苹果压压惊,果然问题出处在此!!!!

================================

在ssh和ajax结合实现异步传输时,经常会出现的一个问题是,json格式的数据从后台传递到页面后无法解析,下面的data即是回调函数中参数,在页面断点后会看到data接收到的是下面一堆数据,其实是异常信息。

------------------------------------------------------------------------------------------

data
"
StrutsProblemReport
Strutshasdetectedanunhandledexception:

Messages:
  1. PositionedUpdatenotsupported.
  2. java.lang.reflect.InvocationTargetException
  3. org.apache.struts2.json.JSONException:java.lang.reflect.InvocationTargetException
  4. org.apache.struts2.json.JSONException:org.apache.struts2.json.JSONException:java.lang.reflect.InvocationTargetExceptio
  5. org.apache.struts2.json.JSONException:org.apache.struts2.json.JSONException:org.apache.struts2.json.JSONException:java.lang.reflect.InvocationTargetException
File: com/MysqL/jdbc/sqlError.java
Linenumber: 1,055

tacktraces
org.apache.struts2.json.JSONException:org.apache.struts2.json.JSONException:org.apache.struts2.json.JSONException:org.apache.struts2.json.JSONException:org.apache.struts2.json.JSONException:java.lang.reflect.InvocationTargetException
org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:243)
org.apache.struts2.json.JSONWriter.process(JSONWriter.java:165)
org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
org.apache.struts2.json.JSONWriter.write(JSONWriter.java:99)
org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:112)
org.apache.struts2.json.JSONResult.execute(JSONResult.java:198)com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.dispatcher.serviceAction(dispatcher.java:488)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(UnkNownSource)
----------------------------------------------------------------------------------------

那么,为什么会出现这个异常呢?

究其原因,竟然是Hibernate的懒加载引起的。一定是你传递的数据中有引用类型的数据采用了懒加载机制。

比如:我要从Action中向前台传送一个Collection,通过get方法

publicCollectiongetMenuitemList(){
returnthis.menuitemList;
}

而其中Menuitem类型的数据结构是:

publicclassMenuitem{
privateLongmid;
privateLongpid;//父节点
privateStringname;//树的节点的名称
privateBooleanisParent;//是否为父节点
privateStringicon;//图标的路径
privateBooleanchecked;//复选框是否被选中

privateSetusers;

//getter(),setter()方法

}

在映射文件Menuitem.hbm.xml中users属性的配置如下:

未设置lazy="false",则默认采用懒加载模式。

中间表user_menuitem中没有数据时,ok,不会牵涉到use表,也就不存在懒加载问题,运行一切正常。

但是当user_menuitem表中有数据,且数据与所传送的Menuitem对象有关时,就会有问题了(那么你就GGGG 了)

因为懒加载,这样在Action中获取的Menuitem对象中的users属性中的set集合中会存在user对象的引用,但是user的信息其实并未加载,

只有当用到时,容器才再次发出sql请求进行加载,但是在json插件对menuitemList进行处理以转换成json格式时,HibernateSession早已关闭,这样user信息便加载不成功,而它又无法对set集合中空的引用进行处理,所以便抛出了JSONException。

有人可能会有疑问,我在web.xml中配置了OpenSessionInViewFilter过滤器,为什么Session还会关闭呢!?

这个疑问问的好!!我也不知何故,在网上也没找到相关的解释,不知是不是ajax的XMLHttpRequest的问题,

总之,在struts2与ajax结合的过程中,OpenSessionInView模式不起作用了!请知道的朋友不吝赐教!

好!既然知道了问题的原因,那么解决方法就很明了了!

方法一:设置lazy="false",即对user不采用懒加载。如

lazy="false">

不过这时要注意在User对象中有没有其他对象的引用,用过有,也要设置为非懒加载模式。

方法二:忽略setusers属性,(推荐使用)

如果在前台页面不需要使用该属性的话,就不要把他传到前台去,设置方法是在其getter方法上加一注解:@JSON(serialize=false)

@JSON(serialize=false)
publicSetgetUsers(){
returnusers;
}

这样json插件在转换数据时就会忽略该属性。

现在问题应该已经解决了!!

下面关于struts2和ajax的结合还有几点建议:

1、在页面用不到的数据最好不要传到前台(这也是之所以推荐第二种方法的原因,传的数据越大,效率越低不是吗!)

2、不是向前台传数据的方法最好不要以get开头,json插件会把所有get开头的方法当做属性,转为json格式数据

3、如果方法必须以get开头,然而又不是为了转为json格式,那么可以在该方法上加注解:@JSON(serialize=false)

4、需要传到前台的数据,一定要在dao中加载完毕,不能使用懒加载模式。


来自http://blog.sina.com.cn/s/blog_7c28bad401013qbe.html(谢谢这位大哥跟豪哥下午给我的一些思路)

ajax请求json格式的数据,在经过interceptor时出现JSONException

ajax请求json格式的数据,在经过interceptor时出现JSONException

出现题目描述的问题的原因和对应的解决方法如下:

(1)json中有Date类型的数据,在进行json解析的时候出现改类型不能被正确解析。应该把属性的类定义为java.util.Date;

(2)Action中定义的方法不是要返回前台定义的属性,可是方法的名称是getXxx,jsonplugins把这个方法当作属性用反射的方式调用了,这样就会出行JSONexception。这种情况的解决方法有两种,一种是把方法名不要定义为getXxx,也可以再方法名前加@JSON(serialize=false)。

android – 从url解析JSON,异常:解析数据时出错org.json.JSONException:字符115处的未终止数组

android – 从url解析JSON,异常:解析数据时出错org.json.JSONException:字符115处的未终止数组

我正在解析这个url,我有一个例外,不知道如何跳过它……我只需要获得100个最受欢迎的应用程序的名称.有一个关键的“im:name”,里面有一个键“lebel”,但是我认为它是无效的JsonArray,所以我需要找到通过键“im:name”获取名字的方法…有smb任何想法我该如何解决这个问题?

这是我的AsyncTask.class

    public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

    String jsonStringUrl = "https://itunes.apple.com/br/RSS/topfreeapplications/limit=100/json";
    JSONArray dataJsonArr = null;

    @Override
    protected void onPreExecute() {}

    @Override
    protected String doInBackground(String... arg0) {

        try {
            // instantiate our json parser
            JsonParser jParser = new JsonParser();
            // get json string from url
            JSONObject json = jParser.getJSONFromUrl(jsonStringUrl);
            // get the array of users
//HERE I NEED TO CHANGE SOMETHING
            dataJsonArr = json.getJSONArray("Feed"); // probably wrong
            // loop through all users
            for (int i = 0; i < dataJsonArr.length(); i++) {
                JSONObject c = dataJsonArr.getJSONObject(i);
                // Storing each json item in variable
                String name = c.getString("im:name");//probably wrong
            }
        } catch (JSONException e) {
            e.printstacktrace();
        }
        return null;
    }
}

这是日志

    09-10 20:04:03.013  18211-18241/com.yuretsrodik.top100apps E/JsonParser.java﹕ Error parsing data org.json.JSONException: Unterminated array at character 115 of {"Feed":{"author":{"name":{"label":"iTunes Store"}, "uri":{"label":"http://www.apple.com/br/itunes/"}}, "entry":[n{"im:name":{"label":"Messenger"}, "im:image":[n{"label":"http://a474.phobos.apple.com/us/r30/Purple4/v4/78/1f/f9/781ff9ea-bf94-5309-4c32-4b901279e54a/mzl.rairyzma.53x53-50.png", "attributes":{"height":"53"}}, n{"label":"http://a990.phobos.apple.com/us/r30/Purple4/v4/78/1f/f9/781ff9ea-bf94-5309-4c32-4b901279e54a/mzl.rairyzma.75x75-65.png", "attributes":{"height":"75"}}, n{"label":"http://a1675.phobos.apple.com/us/r30/Purple4/v4/78/1f/f9/781ff9ea-bf94-5309-4c32-4b901279e54a/mzl.rairyzma.100x100-75.png", "attributes":{"height":"100"}}], "summary":{"label":"lcance instantaneamente as pessoas na sua vida, gratuitamente. O Messenger é como mensagens de texto, mas você não precisa pagar por cada mensagem (funciona com o seu plano de dados). \n\nNão é só para amigos no Facebook: envie mensagens para as pessoas na sua agenda de contatos e basta inserir um número de telefone para adicionar um novo contato.\n\nBate-papos em grupo: crie grupos para as pessoas a quem você mais envia mensagens. Dê um nome a eles, defina fotos para o grupo e os mantenha em um só lugar.\n\nFotos e vídeos: grave vídeos e tire selfies ou outras fotos diretamente do aplicativo e envie-os com um toque.\n\nLigações gratuitas: fale por quanto tempo quiser, mesmo com pessoas em outros países. (Ligações são gratuitas somente através do Wi-Fi. Do contrário, cobranças de dados padrão são aplicáveis).\n\nMais formas de enviar mensagens: \nDê vida às suas conversas com as figurinhas. \nVeja uma prévia das suas fotos e vídeos no rolo da câmera sem sair da conversa, e escolha as melhores para enviar.\nGrave mensagens de voz quando tiver mais para dizer\n\nRecursos adicionais:\nSaiba quando as pessoas viram suas mensagens.\nEncaminhe mensagens ou fotos para as pessoas que não estavam na conversa.\nProcure pessoas e grupos para entrar em contato com eles rapidamente.\nAtive a localização para que as pessoas saibam que você está nas imediações.\nVeja quem está disponível no Messenger e quem está on-line no Facebook. \nDesative as notificações quando você estiver trabalhando, dormindo ou se precisar dar um tempo.\nFique conectado para nunca perder uma mensagem."}, "im:price":{"label":"Grátis", "attributes":{"amount":"0.00000", "currency":"USD"}}, "im:contentType":{"attributes":{"term":"Application", "label":"Aplicativo"}}, "rights":{"label":"© Facebook, Inc."}, "title":{"label":"Messenger - Facebook, Inc."}, "link":{"attributes":{"rel":"alternate", "type":"text/html", "href":"https://itunes.apple.com/br/app/messenger/id454638411?mt=8&uo=2"}}, "id":{"label":"https://itunes.apple.com/br/app/messenger/id454638411?mt=8&uo=2", "attributes":{"im:id":"454638411", "im:bundleId":"com.facebook.Messenger"}}, "im:artist":{"label":"Facebook, Inc.", "attributes":{"href":"https://itunes.apple.com/br/artist/facebook-inc./id284882218?mt=8&uo=2"}}, "category":{"attributes":{"im:id":"6005", "term":"Social Networking", "scheme":"https://itunes.apple.com/br/genre/ios-redes-sociais/id6005?mt=8&uo=2", "label":"Redes sociais"}}, "im:releaseDate":{"label":"2011-10-19T15:39:30-07:00", "attributes":{"label":"19/10/2011"}}}, n{"im:name":{"label":"WhatsApp Messenger"}, "im:image":[n{"label":"http://a1554.phobos.apple.com/us/r30/Purple1/v4/1f/94/ff/1f94ffd9-159e-a247-2c0f-059f86b6c6c9/mzl.ivmblqpq.53x53-50.png", "attributes":{"height":"53"}}, n{"label":"http://a422.phobos.apple.com/us/r30/Purple1/v4/1f/94/ff/1f94ffd9-159e-a247-2c0f-059f86b6c6c9/mzl.ivmblqpq.75x75-65.png", "attributes":{"height":"75"}}, n{"label":"http://a1251.phobos.apple.com/us/r30/Purple1/v4/1f/94/ff/1f94ffd9-159e-a247-2c0f-059f86b6c6c9/mzl.ivmblqpq.100x100-75.png", "attributes":{"height":"100"}}], "summary":{"label":"O WhatsApp Messenger é um mensageiro para smartphone
09-10 20:04:03.013  18211-18241/com.yuretsrodik.top100apps W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x42044e48)
09-10 20:04:03.023  18211-18241/com.yuretsrodik.top100apps E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: com.yuretsrodik.top100apps, PID: 18211
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:300)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: java.lang.NullPointerException
            at com.yuretsrodik.top100apps.AsyncTaskParseJson.doInBackground(AsyncTaskParseJson.java:32)
            at com.yuretsrodik.top100apps.AsyncTaskParseJson.doInBackground(AsyncTaskParseJson.java:10)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)

将非常非常感谢帮助!!因为我真的堆叠(

解决方法:

首先,您进行调用将结果转换为名为json的字符串.
然后你必须将字符串转换为Json对象

          String json = null;  
        JSONObject jsonObj = null;  JSONObject FeedsObject = null;


     json = jParser.getJSONFromUrl(jsonStringUrl);
       if (json != null) {
    try {
         jsonObj = new JSONObject(json);

        FeedObject = jsonObj.getJSONObject("Feed");

为了更好地理解,请访问http://json.parser.online.fr/beta/并在那里粘贴您的json数据.
在右边你有一个设置按钮—>显示类型
您可以找到对象,字符串和数组

见下图.你试图获得一个不是数组的对象

com.alibaba.fastjson.JSONException: syntax error, pos 6, json : 这个 json 报错怎么整??

com.alibaba.fastjson.JSONException: syntax error, pos 6, json : 这个 json 报错怎么整??

com.alibaba.fastjson.JSONException: syntax error, pos 6, json : 

 

代码写了 ,但是报错了

    JSONObject querySql = JSON.parseArray(ccont).getJSONObject(0).getJSONObject("reader")
                    .getJSONObject("parameter").getJSONObject("querySql");;
            

 

要解析的 json 是  [{"reader":{"parameter":{"querySql":"SELECT * FROM  `t_rsd_model_history`t  WHERE  t.`status` = '' 正在执行 '' ;","readsource":""},"name":"mysqlreader"},"writer":{"parameter":{"writersource":"","column":["model_name"],"writeMode":"insert","batchSize":["22"],"table":["t_rsd_model_history"],"preSql":["SELECT * FROM  `t_rsd_model_history`t  WHERE  t.`status` = '' 正在执行 '' ;"]},"name":"mysqlwriter"}}]

E / VOLLEY:org.json.JSONException:值<html> <body> <java.lang.String类型的脚本无法转换为JSONObject

E / VOLLEY:org.json.JSONException:值

如何解决E / VOLLEY:org.json.JSONException:值<html> <body> <java.lang.String类型的脚本无法转换为JSONObject?

我针对相同的问题尝试了很多解决方案,并将字符串转换为json对象,但未解决。我不清楚json url或代码的确切位置在哪里。

json数据:

[{"id":1,"image_id":1,"shop_name":"sunset garage","phone_number":"9989987878","address":"bapunagar","pincode":"382345","city":"ahmedabad","state":"gujarat","shoptime_id":1,"services_id":2,"lattitude":11.230000000000000426325641456060111522674560546875,"longitude":32.4500000000000028421709430404007434844970703125,"created_at":null,"updated_at":null},{"id":2,"image_id":2,"shop_name":"laxmi mechanics","phone_number":"9979965676","address":"thakkarnagar","pincode":"345645","shoptime_id":2,"lattitude":56.4500000000000028421709430404007434844970703125,"longitude":12.3499999999999996447286321199499070644378662109375,"updated_at":null}]

代码如下:

private void addItemsFromJSON() {
    System.out.println(":::::::IN JSON FUNCTION::::::::::::::");
  //  JsonParser parser=new JsonParser();
   // parser.parse(json_url);
    //requestQueue=Volley.newRequestQueue(this);

    JsonObjectRequest request=new JsonObjectRequest(Request.Method.GET,json_url,null,new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                   // String array= String.valueOf(convert(response));


                    try {
                        JSONArray jsonArray=new JSONArray(response);
                        for (int i=0;i<jsonArray.length();i++){

                            JSONObject itemObj=jsonArray.getJSONObject(i);

                            String img1 = itemObj.getString("image_id");
                            String img2 = itemObj.getString("img2");
                            String name = itemObj.getString("shop_name");
                            System.out.println("Shop Name::"+name);
                            String rating = itemObj.getString("rating");
                            String time = itemObj.getString("shoptime_id");
                            String services = itemObj.getString("services_id");
                            String address=itemObj.getString("address");
                            String zip_code=itemObj.getString("pincode");
                            String phone=itemObj.getString("phone_number");
                            latitude=itemObj.getString("latitude");
                            longitude=itemObj.getString("longitude");
                            shop shop = new shop(img1,img2,name,rating,time,services,address,zip_code,phone,latitude,longitude);
                            viewItems.add(shop);
                        }
                    } catch (JSONException e) {
                        System.out.println(":::JSON ARRAY ERROR::::");
                        e.printstacktrace();
                    }
                }
            },new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            System.out.println(":::::::::::::::::::ERROR::::::::::::::::::::::::::::");
           // Log.e("VOLLEY",error.getMessage());
        }
    });
    requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(request);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

今天关于ssh与ajax结合之json异常:org.apache.struts2.json.JSONExceptionssh ajax的介绍到此结束,谢谢您的阅读,有关ajax请求json格式的数据,在经过interceptor时出现JSONException、android – 从url解析JSON,异常:解析数据时出错org.json.JSONException:字符115处的未终止数组、com.alibaba.fastjson.JSONException: syntax error, pos 6, json : 这个 json 报错怎么整??、E / VOLLEY:org.json.JSONException:值 等更多相关知识的信息可以在本站进行查询。

本文标签: