簡體   English   中英

JavaScript字符串中無法刪除的換行符

[英]Unremovable Line Breaks in JavaScript string

我有一段代碼將JSON對象序列化為MVC C#控制器中的字符串。 然后,我需要使用此序列化的JSON在前端設置JavaScript var的值。

當我嘗試將其反序列化回JSON對象時,我注意到JSON.parse一直在中斷。 經過進一步檢查,字符串本身似乎包含換行符(例如\\ n,\\ r)。 但是,如果我嘗試將其刪除,則代碼會指出新行不存在。

這是我嘗試過的一堆東西:

  • console.log(object.toString().indexOf("\\r")); =這將返回-1。 \\ n,\\ r \\ n,\\ t和\\ f相同
  • console.log(object.toString().indexOf("\\\\r")); =與上面相同,如果有某種原因錯過了,請使用雙反斜杠。
  • console.log(object.replace(/[\\t\\r\\n\\f]/gm, "")) = string仍然使用相同的字符串輸出,包括所有隨機換行符。 如果我的正則表達式錯誤,請更正我。
  • 通過顯示字符串中隱藏字符的網站( http://show-hidden-characters.dostring.com/ )運行此字符串=它顯示字符串具有行尾(LF)字符(例如“ dob”:“ 1970- 08- [行尾(LF)])
  • 使用Notepad ++ =替換\\ r \\ n可行,在字符串中替換了48個匹配項。 奇怪的是,它不適用於代碼。
  • 通過JSON lint網站( https://jsonlint.com/ )運行此字符串=顯示無效的JSON,位於斷行的位置

我用來序列化JSON的代碼是:

converter.Options.HttpPostParameters.Add("object", JsonConvert.SerializeObject(object).Replace("\\r\\n", "").Replace("\\n", "").Replace("\\r", ""))

我通過Razor頁面上的腳本標簽將其保存到前端,如下所示:

<script>
    var object = "@HttpContext.Current.Request.Form["object"]";
</script>

關於這個問題,我不知所措。 顯然,var中有一個換行符,但是我無法使用代碼檢測到或刪除它。 C#控制器中的原始字符串還使用json.Replace("\\r\\n", "").Replace("\\n", "").Replace("\\r", "")刪除了這些字符它總是以某種方式不斷添加回JavaScript變量中的相同點。

另一個令人沮喪的地方是,添加這些隨機換行符的位置似乎不一致。 一個分解了一個出生日期字符串,另一個簡單地在整個JSON對象中的某些鍵或值之前應用換行符。 有沒有人有什么建議?

我不確定默認值是否隨着時間而改變,但是JSON.NET的當前默認值是no formating。 如果您的版本不是默認值,則可以手動更改/設置此值:

var noFormatting = new JsonSerializerSettings();
noFormatting.Formatting = Formatting.None;


var test = new {
    Name = "Test\r\nName",
    Value = "Test2"
};

Console.WriteLine(JsonConvert.SerializeObject(test, noFormatting));

結果是:

{"Name":"Test\r\nName","Value":"Test2"}

或者您可能會在調試器中看到它:

string value = "{\"Name\":\"Test\\r\\nName\",\"Value\":\"Test2\"}";

請注意, JsonSerializerSettings中有一些類型緩存功能,因此,如果您使用公共實例(例如,不要在循環中定義它,或者將其定義為經常使用的類中的字段),則可以更快。

在線嘗試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM