C# 将特殊字符写入json文件会产生额外的反斜杠
更新:反斜杠字符也被stackoverflow解析。在编写/编辑问题时,它会显示输出,如最后给出的图像所示(非常不同),但页面上发布的实际问题却非常不同。请看图片 我面临的问题是,在写入文件时,我会得到一个额外的反斜杠。我正在生成图像路径(可在网站上找到)以及一些文本,并将其写入json文件。为要保存在文件中的图像路径生成的字符串如下C# 将特殊字符写入json文件会产生额外的反斜杠,c#,json,json.net,special-characters,C#,Json,Json.net,Special Characters,更新:反斜杠字符也被stackoverflow解析。在编写/编辑问题时,它会显示输出,如最后给出的图像所示(非常不同),但页面上发布的实际问题却非常不同。请看图片 我面临的问题是,在写入文件时,我会得到一个额外的反斜杠。我正在生成图像路径(可在网站上找到)以及一些文本,并将其写入json文件。为要保存在文件中的图像路径生成的字符串如下 ImagePath = "http://example.com/wp-content/uploads/"+YearcomboBox.Text+"/"+Monthc
ImagePath = "http://example.com/wp-content/uploads/"+YearcomboBox.Text+"/"+MonthcomboBox.Text+"/" + AddDashesFileName(Specialtitle) + ".jpg";
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());
我需要文件中的输出/保存字符串作为
http://example.com/wp-content/uploads/2018/02/abc-def-gh-2018.jpg
相反,我用双反斜杠将路径保存在文件中
http:\/\/example.com\/wp content\/uploads\/2018\/02\/abc-def-gh-2018.jpg
我试着将字符替换为
ImagePath = ImagePath.Replace("/",@"\\/");
在文件中插入两个反斜杠。
接下来我必须保存一些包含特殊字符的字符串,如
string ss="\r\n\r\nThe bla bla bla...";
当我写这个字符串时,它会将带有双反斜杠的字符串保存为
\\r\\n\\r\\n废话废话
相反,我需要文本的格式
\r\n\r\n bla bla bla bla
写入文件的完整代码如下所示
ImagePath = "http://example.com/wp-content/uploads/"+YearcomboBox.Text+"/"+MonthcomboBox.Text+"/" + AddDashesFileName(Specialtitle) + ".jpg";
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());
更新:
您试图将无效数据存储到JSON文件中 反斜杠(
\
)是JSON格式的特殊字符。它用于转义文件中的特殊字符。如果字符串值本身包含反斜杠,则需要将其转义(创建\\
)。在JSON文件中放置一个反冲将转义接下来出现的任何字符
现在JSON转换器通常会为您执行此操作,因此您不必担心它。这意味着该值:
http://specser.com/wp-content/uploads/2018/2/Special.jpg
应在JSON文件中格式化为:
http:\\/\\/specser.com\\/wp content\\/uploads\\/2018\\/2\\/Special.jpg
但是,我不清楚为什么要避开正斜杠,因为正斜杠对于在JSON文件中存储unscaped是完全有效的
至于文本值,换行符(
\n
)是一个特殊字符。这意味着,如果它基于用户输入,用户自己写一个反斜杠,后跟一个n(“\n”),大多数组件将把它解释为文本,而不是特殊字符(当然,这在很大程度上取决于您使用的是什么)
您可以通过逐字记录字符串看到区别:
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的工作原理。您可以根据示例代码检查它是否正常工作 您试图将无效数据存储到JSON文件中 反斜杠(
\
)是JSON格式的特殊字符。它用于转义文件中的特殊字符。如果字符串值本身包含反斜杠,则需要将其转义(创建\\
)。在JSON文件中放置一个反冲将转义接下来出现的任何字符
现在JSON转换器通常会为您执行此操作,因此您不必担心它。这意味着该值:
http://specser.com/wp-content/uploads/2018/2/Special.jpg
应在JSON文件中格式化为:
http:\\/\\/specser.com\\/wp content\\/uploads\\/2018\\/2\\/Special.jpg
但是,我不清楚为什么要避开正斜杠,因为正斜杠对于在JSON文件中存储unscaped是完全有效的
至于文本值,换行符(
\n
)是一个特殊字符。这意味着,如果它基于用户输入,用户自己写一个反斜杠,后跟一个n(“\n”),大多数组件将把它解释为文本,而不是特殊字符(当然,这在很大程度上取决于您使用的是什么)
您可以通过逐字记录字符串看到区别:
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的工作原理。您可以根据示例代码检查它是否正常工作 对于第一部分,只需使用“\\”而不是
/
,但是对于第二部分,为什么还要用JSON存储新行呢?JSON不是数据可视化的格式。@请刷新以查看更新。我正在使用一些wordpess插件来生成和恢复备份。对于第一部分,只需使用`\\`而不是/
,但是对于第二部分,为什么还要用JSON存储新行呢?JSON不是数据可视化的格式。@请刷新以查看更新。我正在使用一些wordpess插件来生成和恢复备份。您好,谢谢您的详细回答。我希望我的json文件格式为http:\/\/specser.com\/wp content\/uploads\/2018\/2\/Special.jpg。我也在做和你说的一样的事情,但问题是它在控制台上打印正确,但在写入文件时会插入额外的反斜杠。它将字符串保存为http:\/\/specser.com\\/wp content\\\/uploads\\/2018\\/2\\/Special.jpg.@ImranKanjoo如果字符串中有反斜杠,则应使用额外的反斜杠对其进行转义,这就是JSON格式的定义方式。如果您真的想转义前向斜杠(不必转义),那么在JSON中可以使用writer.WriteRawValue($“\{ImagePath}”)
来编写原始(未扫描)值。在我得到时,我使用了ImagePath=”http://example.com/wp-content/uploads/“+YearcomboBox.Text+”/“+MonthcomboBox.Text+”/“+AddDashesFileName(Specialtitle)+“.jpg”;ImagePath=ImagePath。替换(“/”,@“\/”)代码>使用writer.WriteRawValue,它没有变化,它是相同的。