【问题标题】:net.sf.json.JSONObject adds backslashes where it's not expected?net.sf.json.JSONObject 在不期望的地方添加反斜杠?
【发布时间】:2023-03-21 10:23:01
【问题描述】:

我正试图弄清楚为什么 net.sf.json.JSONObject 在我的 java 代码中不应该添加额外的反斜杠:

JSONObject obj = new JSONObject ();
obj.element ("column_name", "<a href=\"#\" title=\"test\">Test !</a>");

将输出:

<a href=\"#\" title=\"test\">Test !<\/a>

在 附近有一个额外的“\”。

如何避免这种行为?

【问题讨论】:

    标签: java json backslash


    【解决方案1】:

    它可能使用与在脚本块 (&lt;script ...&gt; ... &lt;/script&gt;) 中使用的 JavaScript 字符串相同的方法来转义 JSON 中的字符串,根据 HTML 语法规则可能不包括字符序列 &lt;/

    这对你有什么影响吗?转义“随机”字符不会改变 JSON 或 JavaScript 中字符串文字的含义。字符串文字 "/""\/" 在技术上是完全相同的:

    if ("/" === "\/") alert("The same!");
    

    编辑:顺便说一句,JSON 语法明确地将正斜杠(solidus)列为可以转义的字符。

    【讨论】:

    • 嗯,这很奇怪,因为我检查了您所说的内容,当然,您是对的,但问题是我将 dom 中的 html 值添加到 extjs(网格)中的类似元素的表格中.该列已损坏(数据元素与标题垂直对齐不佳),我发现问题来自无效的 html。我检查了请求返回的html,除了“\/”,其他都很好。这很奇怪:p 但是感谢您的帮助,我很感激!
    • 那么你需要提供更多细节,因为现在我无法想象为什么转义斜线会产生问题,但转义引号不会。
    • 我遇到了类似的问题,但它是一个文件夹结构,所以 /folder_name 变成了 \/folder_name(我使用的是 org.json)但是我们的解析器(cjson)在解码后留下了反斜杠它到一个字符串。我使用了下面的@ktbiz 方法,但在客户端只是将 JSON 字符串上的 \/ 替换为 / ,然后再将其发送出去。我在其他地方读到这是 org.json toString() 代码中的错误,但如果 JSON 模式批准,这听起来更像是其他 JSON 解析器(在我的情况下为 cjson)中的错误。
    【解决方案2】:

    我也遇到了这个问题。原来问题是我的代码同时使用了 org.json.JSONObject 和 com.amazonaws.util.json.JSONObject。两者之间的转换是创建字符串和转义字符。考虑到您使用的是 net.sf.json.JSONObject,这也可能是您的问题。检查您的导入是否有其他版本的 JSONObject。

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 2021-11-21
      • 2019-07-04
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 2016-06-14
      • 2011-05-26
      相关资源
      最近更新 更多