Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在WebView中从loadUrl解析JSON时出现语法错误_Javascript_Android - Fatal编程技术网

Javascript 在WebView中从loadUrl解析JSON时出现语法错误

Javascript 在WebView中从loadUrl解析JSON时出现语法错误,javascript,android,Javascript,Android,我将JSON从Java传递到WebView,如下所示: JSONObject _res = new JSONObject(response); webView.loadUrl("javascript:receive('"+url+"', '"+_res.toString()+"')"); 在JavaScript中,我有一个相应的函数: function receive(url, data){ if(_callbacks[url] && data){ _c

我将JSON从Java传递到WebView,如下所示:

JSONObject _res = new JSONObject(response);
webView.loadUrl("javascript:receive('"+url+"', '"+_res.toString()+"')");
在JavaScript中,我有一个相应的函数:

function receive(url, data){
    if(_callbacks[url] && data){
        _callbacks[url](JSON.parse(data));
        delete _callbacks[url];
        hideSpinner();
    }
}
JS中的JSON.parse()会因“Web控制台”而失败﹕ 未捕获的语法错误:意外标记非法”。 这可能是编码问题吗?我还确信提供的JSON字符串是有效的

下面是一个来自LogCat的调用示例:

javascript:receive('mm://content/%7B%22id%22%3A%22test%22%2C%22city_id%22%3A0%7D', '{"title":"test","body":"<p>Foo<\/p>\r\n<p>Bar<\/p>","menu":[]}')

根据我的说法,在你的情况下,你应该双倍逃离CR和LF。
JSON.parse('{“title”:“test”,“body”:“Foo\\r\\nBar”,“menu”:[]}”)


我不知道用java做什么,但在从服务器发送之前,你应该找到一种方法来摆脱这些限制。

这是一个古老的问题,但上面的答案没有帮助

答案来自“developer.android”的帮助并不总是容易理解的,因此对于这种情况,使用loadUrl在webview上将json对象从Java传递到javascript的问题的正确答案是:

JSONObject _res = new JSONObject(response);
String url = "mm://content/%7B%22id%22%3A%22test%22%2C%22city_id%22%3A0%7D";

class WebAppInterface {
    @JavascriptInterface
    public String Get_res_toString() {
        return _res.toString();
    }

    @JavascriptInterface
    public String Get_url() {
        return url;
    }
}

webview.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new WebAppInterface(), "Android");
webView.loadUrl("javascript:receive(Android.Get_url(), Android.Get_res_toString())");
js端接收到的字符串将与logcat上打印的字符串相同,并且在解析时不会抛出任何“错误”(当然,只要正确创建了json对象)


更多关于如何工作的信息。

与其通过loadUrl将数据传递给JavaScript,不如使用loadUrl调用Android端的另一个函数,该函数可以将数据返回到JavaScript。解析非常严格,您的JSON字符串可能是有效的,但您可以与我们分享一个示例,因为这正是它抛出错误的地方
JSONObject _res = new JSONObject(response);
String url = "mm://content/%7B%22id%22%3A%22test%22%2C%22city_id%22%3A0%7D";

class WebAppInterface {
    @JavascriptInterface
    public String Get_res_toString() {
        return _res.toString();
    }

    @JavascriptInterface
    public String Get_url() {
        return url;
    }
}

webview.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new WebAppInterface(), "Android");
webView.loadUrl("javascript:receive(Android.Get_url(), Android.Get_res_toString())");