Gson снова избегает escape-последовательностей при преобразовании в json - Android - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь отправить html строку на сервер. html, который у меня есть:

val htmlInput = "<div>ansi nmasbnmbsanbdmnsbmndbsanbdnbsand<br></div><div><span class=\"size\" style=\"font-size: 16px\">ggsgjfgjfdgfgdg</span><br></div><div><br></div><div><span class=\"size\" style=\"font-size: 16px\">fgsdgfd</span><br></div><div><br></div><div><br></div><div><ul><li>fgsfgdf<br></li></ul><div><br></div><div><ol><li>fgdsg<br></li><li>sdfgsd<br></li><li>sfgs<br></li><li>sdfg<br></li><li>gfdsffgf<br></li></ol><div><br></div><blockquote style=\"background-color: rgb(245, 245, 245); padding: 7px; border: 1px solid rgb(204, 204, 204);\"><div><div><span class=\"colour\" style=\"color:rgba(57, 229, 0, 2.6)\"><span class=\"highlight\" style=\"background-color:rgba(255, 64, 0, 2.6)\">jfkdsfsdfsfsdfs</span></span><br></div></div></blockquote></div><div><br></div><div>ajjfajfjajfjf<br></div><div><br></div><table border=\"1\" cellpadding=\"2\" cellspacing=\"2\" style=\"width: 100%;\"><tbody><tr><td>afafsadfasfdsa</td><td>ddadasdadadasd</td></tr><tr><td>adadasdasd</td><td>asdadadasdasda</td></tr></tbody></table><div><br></div><div><br></div></div><div><br></div>"

Теперь я пытаюсь построить вход json, используя gson как

val inputData = mapOf("input" to htmlInput)
val gson = GsonBuilder().disableHtmlEscaping().create()
val inputDataString = gson.toJson(inputData)

Теперь inputDataString получена из приведенного выше кода это как,

{ "input" : "<div>ansi nmasbnmbsanbdmnsbmndbsanbdnbsand<br><\/div><div><span class=\\\"size\\\" style=\\\"font-size: 16px\\\">ggsgjfgjfdgfgdg<\/span><br><\/div><div><br><\/div><div><span class=\\\"size\\\" style=\\\"font-size: 16px\\\">fgsdgfd<\/span><br><\/div><div><br><\/div><div><br><\/div><div><ul><li>fgsfgdf<br><\/li><\/ul><div><br><\/div><div><ol><li>fgdsg<br><\/li><li>sdfgsd<br><\/li><li>sfgs<br><\/li><li>sdfg<br><\/li><li>gfdsffgf<br><\/li><\/ol><div><br><\/div><blockquote style=\\\"background-color: rgb(245, 245, 245); padding: 7px; border: 1px solid rgb(204, 204, 204);\\\"><div><div><span class=\\\"colour\\\" style=\\\"color:rgba(57, 229, 0, 2.6)\\\"><span class=\\\"highlight\\\" style=\\\"background-color:rgba(255, 64, 0, 2.6)\\\">jfkdsfsdfsfsdfs<\/span><\/span><br><\/div><\/div><\/blockquote><\/div><div><br><\/div><div>ajjfajfjajfjf<br><\/div><div><br><\/div><table border=\\\"1\\\" cellpadding=\\\"2\\\" cellspacing=\\\"2\\\" style=\\\"width: 100%;\\\"><tbody><tr><td>afafsadfasfdsa<\/td><td>ddadasdadadasd<\/td><\/tr><tr><td>adadasdasd<\/td><td>asdadadasdasda<\/td><\/tr><\/tbody><\/table><div><br><\/div><div><br><\/div><\/div><div><br><\/div>" }

Я не могу понять, почему Гсон продолжает избегать строки, которая правильно экранирована. Подскажите, что мне нужно изменить, чтобы приведенный выше код работал.

Заранее спасибо.

1 Ответ

0 голосов
/ 24 апреля 2020

Ну, все в порядке, если мы сохраним кавычки как ", JSON формат будет нарушен, например:

{
 "a" : ""b"
}

, но с защитой backsla sh (экранирование символов) "\"" в порядке:

{
 "a": "\"b"
}

Я пытаюсь отправить строку html на сервер.

Если запрос имеет "content-type", "application/json" ваша серверная сторона должна справиться с этим. Ничего не делать на вашей стороне


о disableHtmlEscaping:

По умолчанию Gson экранирует HTML символов, таких как <> et c. Используйте эту опцию, чтобы настроить Gson на пропуск HTML символов как есть.

...