将特殊字符写入 json 文件会生成额外的反斜杠
Writing special characters to json file generates extra backslashes
更新:反斜杠字符也被 Whosebug 解析。当 writing/editing 问题时,它显示的输出如最后给出的图像(非常不同)所示,但页面上发布的实际问题非常不同。请看图
我面临的问题是写入文件时出现额外的反斜杠。我正在生成图像路径(可在网站上获得)以及一些文本并写入 json 文件。要保存在文件中的图像路径的生成字符串为
ImagePath = "http://example.com/wp-content/uploads/"+YearcomboBox.Text+"/"+MonthcomboBox.Text+"/" + AddDashesFileName(Specialtitle) + ".jpg";
我需要 output/the 在我的文件中保存的字符串作为
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\\nbla bla bla...
相反,我需要
格式的文本
\r\n\r\nThe 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());
更新:
您正在尝试将无效数据存储到您的 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 文件中。
至于您的文本值,换行符 (\n
) 是一个特殊字符。这意味着如果它基于 user-input 用户自己写一个反斜杠后跟一个 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 的工作原理。您可以根据您的示例代码检查 this fiddle,它工作正常。
更新:反斜杠字符也被 Whosebug 解析。当 writing/editing 问题时,它显示的输出如最后给出的图像(非常不同)所示,但页面上发布的实际问题非常不同。请看图
我面临的问题是写入文件时出现额外的反斜杠。我正在生成图像路径(可在网站上获得)以及一些文本并写入 json 文件。要保存在文件中的图像路径的生成字符串为
ImagePath = "http://example.com/wp-content/uploads/"+YearcomboBox.Text+"/"+MonthcomboBox.Text+"/" + AddDashesFileName(Specialtitle) + ".jpg";
我需要 output/the 在我的文件中保存的字符串作为
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\\nbla bla bla...
相反,我需要
格式的文本\r\n\r\nThe 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());
更新:
您正在尝试将无效数据存储到您的 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 文件中。
至于您的文本值,换行符 (\n
) 是一个特殊字符。这意味着如果它基于 user-input 用户自己写一个反斜杠后跟一个 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 的工作原理。您可以根据您的示例代码检查 this fiddle,它工作正常。