即使添加了另一个反斜杠,JSON 解析器仍然在换行符上失败
Posted
技术标签:
【中文标题】即使添加了另一个反斜杠,JSON 解析器仍然在换行符上失败【英文标题】:JSON parser keeps failing on newline even after adding another backslash 【发布时间】:2020-12-13 17:03:01 【问题描述】:所以我正在为一个学校项目制作一个消息传递平台,我试图保护我的数据库,保护 XSS 攻击,并允许每个字符,包括换行符。
到目前为止,我已经涵盖了所有内容,除了换行符。 JSON 解析器无法解析一个简单的换行符。
我尝试在换行符前加上另一个反斜杠 (\\n),但还是不行!
我该怎么办?!
编辑 1:添加了生成 JSON 数据的代码
string message = "[";
string uid;
for (int i = 0; i < data.Rows.Count; i++)
if (StringCipher.ConvertToUnixTimestamp(DateTime.Now.AddMinutes(-5)) > int.Parse(data.Rows[i][5].ToString()))
queryDelete = "DELETE * FROM Bubbleland WHERE MessageID = " + data.Rows[i][0] + ";";
commandDelete = new OleDbCommand(queryDelete, connection);
commandDelete.ExecuteNonQuery();
else
message += "\"mid\":" + data.Rows[i][0];
if (data.Rows[i][1].ToString() == "")
uid = "user";
else
uid = data.Rows[i][1].ToString();
message += ", \"uid\":\"" + uid;
message += "\", \"name\": \"" + data.Rows[i][2];
message += "\", \"color\": \"" + data.Rows[i][3];
message += "\", \"content\": \"" + data.Rows[i][4];
message += "\"";
if (i + 1 < data.Rows.Count)
message += ",";
message += "]";
编辑2:添加JS处理代码
async function fetchMessages()
$.ajax(
type: "POST",
url: "../ASPX/bubblelandFetch.aspx",
success: function (data)
console.log(data);
data = JSON.parse(data);
var container = document.getElementById("messages-container");
var uid;
container.innerhtml = "";
console.log(data);
for (var i in data)
var message = '<div id="' + data[i]["mid"];
message += '" class="message ' + data[i]["color"] + '">';
message += '<div class="profile-container">';
if (data[i]["uid"] == "user")
uid = "/Media/user"
else
uid = "/Media/Profile/" + data[i]["uid"];
message += '<img src="' + uid + '.png"/>';
message += '<span>' + data[i]["name"] + '</span></div>';
message += '<div class="content">' + data[i]["content"] + '</div>';
container.innerHTML += message;
,
complete: function ()
setTimeout(fetchMessages, intevral);
);
【问题讨论】:
这个 JSON 来自哪里?创建有效的、可解析的 JSON 的最佳方法是从另一个数据结构自动创建它 直接从我的数据库中,预处理并打包成一个整洁的Response.Write
就像我说的,永远不要滚动你自己的 JSON。服务器端代码是什么语言/框架?当然有一个本地数据结构到 JSON 转换器可用
这是带有 .NET 框架的 ASPX/C#。我相信即使有一种将其转换为 JSON 的本机方式,也没有关系,因为我需要以自定义方式从数据库中转换它。
.NET Framework 4.7.2
【参考方案1】:
在解析了您提供给我的字符串后,我偶然发现了一个修复程序,并进行了进一步的研究以了解为什么会发生这种情况。
简单来说:‘单引号‘转义’单引号”“双引号‘转义’双引号”
这些引号的意思是,当使用单引号创建字符串文字时,您必须使用反斜杠 \
转义任何单引号,以使字符串文字有效。使用双引号创建字符串文字时也是如此,但使用反斜杠转义双引号。
一开始我并没有意识到这个问题,尽管我一开始就知道这个问题并且我一直一直这样做。
我遇到了这个Medium article 有助于把东西放在一起,我建议你阅读它以更新使用单引号/双引号和字符串文字。
【讨论】:
【参考方案2】:事实证明,一个未转义的 \r
正在搞乱 JSON 解析器。
每当您Shift + Enter
时,它都会放置\r\n
而不是简单的\n
。我不知道它会这样做。所以在我的 ASPX 后端代码中,我将 \r\n
替换为 <br>
。
【讨论】:
以上是关于即使添加了另一个反斜杠,JSON 解析器仍然在换行符上失败的主要内容,如果未能解决你的问题,请参考以下文章
JSON解析 之 带有反斜杠 "" 的JSON格式请求参数的解析