有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java/Javascript/JSON将JSON字符串从Java传递到Javascript

我正在将我在Java中创建的JSON字符串作为参数传递给从servlet调用的Javascript方法。但是,当我传递JSON字符串时,Firebug会警告我正在传递该字符串:

Java代码:

String jsonString = "{\"id\":1,\"name\":\"Joe Smith\",\"data\":{\"email\":\"smith@gmail.com\",\"phone\":\"555-123-4567\",\"title\":\"CFO\",\"instanceControllerTagLibraryApi\":{\"developmentMode\":false}},\"children\":[],\"instanceControllerTagLibraryApi\":{\"developmentMode\":false}}";

pw.println("<body onload=\"init('"+jsonString+"');\">");

Javascript:

function init(text){
    alert(text);
}

我尝试在传递过程中引用字符串并删除单引号。两者基本上都指向这样一个事实,即正在传递的字符串需要(以某种方式)跳出花括号

错误(单引号):

SyntaxError: unterminated string literal [Break On This Error]

init('{


共 (2) 个答案

  1. # 1 楼答案

    错误不在JSON字符串中,而是在另一段代码中

    pw.println("<body onload=\"init('"+jsonString+"');\">");添加一个onload事件确实是一种粗野的尝试

    不要试图将JSON字符串添加到HTML字符串中,因为有引号,它不会起作用,除非你双倍地转义JSON字符串,这很愚蠢

    当前,您的输出将如下所示:

    <body onload="init('{"id":1, ... }');">
                         ^ - syntax error after this
    

    它将尝试执行JS代码init('{

  2. # 2 楼答案

    弗里茨能解决你的问题,这很好。我肯定会听从他的建议,迅速远离^{

    例如:

    (function run(){
        var data = '{"id":1,"name":"Joe Smith","data":{"email":"smith@gmail.com","phone":"555-123-4567","title":"CFO","instanceControllerTagLibraryApi":{"developmentMode":false}},"children":[],"instanceControllerTagLibraryApi":{"developmentMode":false}}';
    
        function init(){
            console.log(data, JSON.parse(data));
        }
    
        if (window.addEventListener) {
            window.addEventListener('load', init);
        } else if (window.attachEvent) {
            window.attachEvent('load', init);
        }
    ​})();​
    

    http://jsfiddle.net/userdude/eQRBk/1/

    请注意window.addEventListener的使用(以及旧版IE版本的遗留window.attachEvent)。而且console.log在Chrome和Firebug中效果更好;在我看来,IE的控制台在记录对象方面更令人沮丧

    利用你所付出的,你可以(我建议你应该)以不同的方式处理它。不过,请原谅,我对Java不是很精通,我只知道JSP(几乎不知道)。那么

    <%
    
    String jsonString = "'{\"id\":1,\"name\":\"Joe Smith\",\"data\":{\"email\":\"smith@gmail.com\",\"phone\":\"555-123-4567\",\"title\":\"CFO\",\"instanceControllerTagLibraryApi\":{\"developmentMode\":false}},\"children\":[],\"instanceControllerTagLibraryApi\":{\"developmentMode\":false}}'";
    
    %>
    <script>
    (function run(){
        var data = <%=jsonString%>;
    
        function init(){
            console.log(data, JSON.parse(data));
        }
    
        if (window.addEventListener) {
            window.addEventListener('load', init);
        } else if (window.attachEvent) {
            window.attachEvent('load', init);
        }
    ​})();​
    </script>
    

    然后,您可以将该JSP页面插入headbody中,它将正常工作。我还设想您可以将其设置为动态地将数据注入JSP页面。但是,就像我说的,我在这里挥手