Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将特殊字符写入json文件会产生额外的反斜杠_C#_Json_Json.net_Special Characters - Fatal编程技术网

C# 将特殊字符写入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

更新:反斜杠字符也被stackoverflow解析。在编写/编辑问题时,它会显示输出,如最后给出的图像所示(非常不同),但页面上发布的实际问题却非常不同。请看图片

我面临的问题是,在写入文件时,我会得到一个额外的反斜杠。我正在生成图像路径(可在网站上找到)以及一些文本,并将其写入json文件。为要保存在文件中的图像路径生成的字符串如下

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,它没有变化,它是相同的。