更新:stackoverflow也正在解析反斜杠字符。在编写/编辑问题时,它会显示最终给出的图像(非常不同)中显示的输出,但页面上发布的实际问题却非常不同。请看图片。
我面临的问题是,在写入文件时我得到了额外的反斜杠。我正在生成图像路径(在网站上可用)以及一些文本和写在json文件中。要保存在文件中的图像路径的生成字符串为
ImagePath = "http://example.com/wp-content/uploads/"+YearcomboBox.Text+"/"+MonthcomboBox.Text+"/" + AddDashesFileName(Specialtitle) + ".jpg";
我需要输出/我文件中保存的字符串为
http://example.com/wp-content/uploads/2018/02/abc-def-gh-2018.jpg
而是通过双反斜杠
获取保存在文件中的路径HTTP:\ / \ / example.com \ /可湿性粉剂内容\ /上传\ / 2018 \ / 02 \ /abc-def-gh-2018.jpg
我尝试将字符替换为
ImagePath = ImagePath.Replace("/",@"\\/");
在文件中插入两个反斜杠。 我必须保存一些包含特殊字符的字符串,如
string ss="\r\n\r\nThe bla bla bla...";
当我写这个字符串时,它保存带有双反斜杠的字符串 \\ r \\ n \\ r \\ n bla bla bla ...
而我需要格式为
的文本\ r \ n \ r \ n bla bla bla ...
编写文件的完整代码为
string ss="\r\n\r\nThe bla bla bla...";
ImagePath = "http://example.com/wp-content/uploads/"+YearcomboBox.Text+"/"+MonthcomboBox.Text+"/" + AddDashesFileName(Specialtitle) + ".jpg";
ImagePath = ImagePath.Replace("/",@"\/");
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.Formatting = Formatting.Indented;
writer.WriteStartObject();
writer.WritePropertyName("path");writer.WriteValue(ImagePath );
writer.WritePropertyName("text");writer.WriteValue(ss);
writer.WriteEndObject();
.
.
.the json entries which are working fine
}
File.AppendAllText(@"e:\json\file3.json", sb.ToString());
答案 0 :(得分:2)
您正在尝试将无效数据存储到JSON文件中。
反斜杠(\
)是JSON格式的特殊字符。它用于转义文件中的特殊字符。如果您的字符串值包含反斜杠本身,则需要将其转义(创建\\
)。在您的JSON文件中放置一个反弹将会逃脱下一个角色。
现在JSON转换器通常会为您执行此操作,因此您不必担心它。这意味着价值:
http://specser.com/wp-content/uploads/2018/2/Special.jpg
应在JSON文件中格式化为:
HTTP:\\ / \\ / specser.com \\ /可湿性粉剂内容\\ /上传\\ / 2018 \\ / 2 \\ / Special.jpg
但是,我不清楚为什么要转义正斜杠,因为这些非转义非常有效,无法存储在JSON文件中。
对于文本值,换行符(\n
)是一个特殊字符。这意味着如果它基于用户输入,其中用户自己写入反斜杠后跟 n (“\ n”),则大多数组件会将其解释为文本而不是特殊字符( ofcourse这在很大程度上取决于你使用的是什么)。
您可以通过逐字字符串看到差异:
string ss = "\r\n\r\nThe bla bla bla..."; // JSON: "\r\n\r\nThe bla bla bla..."
string ss = @"\r\n\r\nThe bla bla bla..."; // JSON: "\\r\\n\\r\\nThe bla bla bla..."
在逐字版本中,反斜杠和字母 n 都存储为单独的字符,而不是换行符。
总而言之,您展示的示例正是JSON应该如何工作的。您可以签出基于您的示例代码的this fiddle,它可以正常工作。