【问题标题】:Passing JSON String all the way from Java to JSTree messing up JSTree's interpretation of string将 JSON 字符串从 Java 一直传递到 JSTree 会打乱 JSTree 对字符串的解释
【发布时间】:2019-03-29 20:27:15
【问题描述】:

在我的 Java Servlet 服务器上:

String javaJsonStr = "'Simple Root Node 1','Simple Root Node 2', {'text' : 'Root Node 3','children' : ['Child 1','Child 2']}";
request.setAttribute("jsonStrAttr", javaJsonStr );

在我的 HTML 页面上:

<script>
<%String javaStr = request.getAttribute("jsonStrAttr").toString();%>
var dataJson;
dataJson = new String("<%=javaStr%>");
$('#myTreeId').jstree({ 'core' : {
    'data' : [ dataJson ]
} });
</script>

这就是我得到的。

了解我已经尝试了很多变体:没有 toString(),此行中没有引号 dataJson = new String("&lt;%=javaStr%&gt;");,单引号,转义字符。有时我会得到第一个“简单根节点 1”。但是我从来没有得到一个好的节点和子节点树。

知道我在一个糟糕的 Eclipse localhost 浏览器中查看它,但我没有理由相信它在真正的浏览器上会更好。

【问题讨论】:

    标签: javascript string jstree


    【解决方案1】:

    在“数据”中,您传递 ['some string from a request']。

    " 不等于 ' 在 json 中,要有一个有效的 json:总是使用 "

    你必须想办法在java中构建一个有效的JSONArray(我真的认为有很多api可以完成这项工作),最后你需要一个这样的json

    [
        "Simple Root Node 1 ",
        "Simple Root Node 2", 
        {
            "text" : "Root Node 3", 
            "children" : [
                             "Child 1",
                             "Child 2"
                         ]
        }
    ]
    

    然后将 JSONArray 字符串化并发送。

    获取该字符串并使用 JSON.parse 将其转换为 JavaScript 对象:

    const arrayFromJson= JSON.parse('<%=javaStr%>');
    console.log("JavaScript array:", arrayFromJson});
    // ... treat array and do stuff ...
    
    

    【讨论】:

    • 我很难理解您的回答。您的字符串与我显示的字符串之间的唯一区别是您使用双引号,而我使用单引号。您提供的其余信息似乎与我的问题无关。请详细说明一下。
    • 问题是你传递了一个不可转换为 json 的字符串。你必须像这样格式化你的字符串:"[\"Simple Root Node 1 \",\"Simple Root Node 2\",{\"text\":\"Root Node 3\",\"children\": [\"Child 1\",\"Child 2\"]}]" 在JAVA中,然后传递它并在JSON.parse字符串后得到一个真正的JavaScript对象
    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2018-05-13
    相关资源
    最近更新 更多