Передача строки JSON полностью из Java в jsTree, искажающая интерпретацию строки jsTree

#javascript #string #jstree

#javascript #строка #jstree

Вопрос:

На моем сервере 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("<%=javaStr%>"); , одинарные кавычки, escape-символы. Иногда я получаю только этот первый «Простой корневой узел 1». Но я никогда не получаю хорошее дерево узлов и дочерних узлов.

Подтекст: я просматриваю это в убогом браузере Eclipse localhost, но у меня нет оснований полагать, что в реальном браузере это будет работать лучше.

Ответ №1:

В ‘data’ вы передаете [‘некоторую строку из запроса’].

» не равно ‘ в json, чтобы иметь допустимый json: всегда используйте «

Вы должны найти способ создать действительный JSONArray на java (я действительно думаю, что есть много API, которые могут выполнить эту работу), в конце концов, вам нужно иметь json, подобный этому

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

Затем постройте JSONArray и отправьте его.

Получите эту строку и преобразуйте ее в объект JavaScript с помощью JSON.parse :

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

  

Комментарии:

1. Мне трудно следовать вашему ответу. Единственное различие между вашей строкой и той, которую я показываю, заключается в том, что вы используете двойные кавычки там, где я использую одинарные кавычки. Остальная информация, которую вы предоставляете, кажется второстепенной для моего вопроса. Не могли бы вы, пожалуйста, уточнить.

2. Проблема в том, что вы передаете строку, не подлежащую кастомизации, как json. Вы должны отформатировать свою строку следующим образом: «[«Простой корневой узел 1», «Простой корневой узел 2», {«текст»: «Корневой узел 3», «дочерние элементы»: [«Дочерний элемент 1», «Дочерний элемент 2″]}]» в JAVA, затем передать ее и после JSON.разобрать строку, чтобы получить реальный объект JavaScript