2014-11-19 3 views
0

Я Java объект, который преобразуется в JSON строку, используяJson синтаксического анализа() не избежать »в JavaScript

String paramMap = new ObjectMapper().writeValueAsString(custPolicy.getParamMap()); 
    model.addAttribute("testTypeMap", paramMap); 

На странице .jsp, при загрузке я пытаюсь разобрать testTypeMap и получить объект обратно;

var paramMap = JSON.parse('${testTypeMap}'); 
    showTestType('File content', 'LINUX', paramMap);  

объект имеет двойные кавычки (") в одном из полей, и он маскируется обратной косой черты(), когда он превращается в JSON жала в Java, поэтому мы видим„\“ "(из источника показаны)

var paramMap = JSON.parse('{"Filepath":"/home/status.txt","Search expression":"\""}'); 

Но вышеприведенная строка гласит: «Непредвиден SyntaxError: Неожиданная строка».

Я видел несколько сообщений, и они говорят, что нужно два разбора, один для javascript и один для JSON. Я попытался заменить \ "на \\"; но в javascript «всегда», поэтому я не мог его заменить;

Любой указатель на то, что я пропустил здесь?

+2

Должно быть '\\' ', если значение свойства' Search expression' является только одним '' ' – Cheery

+0

Из java после преобразования в качестве строки JSON я получаю \". Но как я могу изменить это на \\ «т.е. двойная обратная косая черта и цитата в javascript? – Dhamayanthi

+0

Что такое начальное значение 'Search expression' - оно пустое или одна двойная кавычка' ''? – Cheery

ответ

0

На самом деле я не зная, как заменить \ «с \\» в JavaScript, а \ «всегда представляется в виде» (только одна цитата без обратной косой черты).

Так что я сделал это заменить на стороне сервера после преобразования в строку JSON с помощью ObjectMapper Джексона, как показано ниже:

String paramMap = new ObjectMapper().writeValueAsString(custPolicy.getParamMap()); 
    // need to replace any \" with \\" in javascript side 
    paramMap = paramMap.replace("\\\"", "\\\\\""); 
    model.addAttribute("testTypeMap", paramMap); 

Теперь в стороне клиента он показывает, как показано ниже:

var paramMap = JSON.parse('{"Filepath":"/home/cavirin/status.txt","Search expression":"\\""}'); 

и это отлично работает, поскольку javascript parse уже позаботился о стороне сервера.

1

Проблема в том, что вы не кодируете строку в ${testTypeMap} как литерал JavaScript. Я не уверен, как это сделать в вашей среде, но это похоже на HTML-кодировку строки, но для JavaScript.

Однако!

В вашем конкретном примере вы можете избежать использования JSON.parse, поскольку JSON уже находится в формате, который может использоваться JavaScript.

var paramMap = ${testTypeMap}; 
showTestType('File content', 'LINUX', paramMap); 

С полученного источника отправленного в браузер, похожий:

var paramMap = {"Filepath":"/home/status.txt","Search expression":"\""}; 
+0

Нет, тогда это будет полная строка, я не стану объектом как объект, поэтому я разбираю ее. Если у меня нет кавычек, все будет хорошо. Я могу проанализировать и получить Java-объект обратно на стороне клиента. Проблема связана с кавычками, и я не знаю, как кодировать для javascript. – Dhamayanthi

+1

Вы уверены, что это не сработает, из вашего примера, похоже, должно. – Matthew

+0

Я уверен. Мне нужно вернуть объект, который я преобразовал в строку JSON со стороны java. Вышеприведенный код в вашем ответе дает мне строку. – Dhamayanthi

Смежные вопросы