【问题标题】:Gson escapes the escape sequences again while converting to json - AndroidGson 在转换为 json 时再次转义转义序列 - Android
【发布时间】:2020-08-07 22:21:14
【问题描述】:

我正在尝试向服务器发送一个 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>"

现在我正在尝试使用 gson 来构造输入 json

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>" }

我不明白为什么 Gson 会进一步转义正确转义的字符串。建议我必须更改哪些内容才能使上述代码正常工作。

提前致谢。

【问题讨论】:

    标签: json string kotlin gson retrofit


    【解决方案1】:

    好吧,一切都很好,如果我们将引号保留为",JSON 格式将被破坏,例如:

    {
     "a" : ""b"
    }
    

    但有反斜杠保护(转义字符)"\"" 可以:

    {
     "a": "\"b"
    }
    

    我正在尝试向服务器发送一个 html 字符串。

    如果请求有"content-type", "application/json",你的服务器端应该处理它。在你身边无事可做


    关于disableHtmlEscaping:

    默认情况下,Gson 会转义 HTML 字符,例如 等。使用此选项可将 Gson 配置为按原样传递 HTML 字符。

    【讨论】:

    • 感谢您的宝贵时间。我有 'class=\"size\"' 并且在使用此字符串构造 json 时会导致将 1 个反斜杠修改为 3 个反斜杠。可以吗?
    • 对于输入"&lt;div class="size"&gt;&lt;/div&gt;",你应该得到{"input": "&lt;div class=\"size\"&gt;/div&gt;"}。对于输入&lt;div class=\"size\"&gt;&lt;/div&gt;,您应该得到{"input": "&lt;div class=\\\"size\\\"&gt;&lt;/div&gt;"}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多