如何将字符串转换为JSON友好字符串



我有一个字符串(文本(,我想使用JSON解析器进行转换,以便它对javascript友好。

在我的视图页面中,我有一些javascript,看起来像:

var site = {
strings: {
addToCart: @someValue,

因此@someValue应该是javascript安全的,比如双引号、转义字符(如果需要(等。

这个值@someValue是一个字符串,但它必须对javascript友好,所以我想使用JSON来解析它。

执行新系统。文本Json有什么事吗?

我试过这个:

return System.Text.Json.JsonDocument.Parse(input).ToString();

但这不起作用,因为我的文本只是一个字符串,而不是JSON字符串。

有其他解析方法吗?

转义字符串以确保其JSON安全的规则如下:

  • Backspace替换为\b
  • 表单馈送被替换为\f
  • 换行符替换为\n
  • 回车被替换为\r
  • 选项卡替换为\t
  • 双引号替换为\">
  • 后间隙替换为\\

虽然这不是绝对必要的,但任何非网络安全字符(即任何非ASCII字符(都可以转换为其转义的Unicode等效字符,以避免潜在的编码问题。

由此,创建自己的转换方法非常简单:

public static string MakeJsonSafe(String s)
{
var jsonEscaped = s.Replace("\", "\\")
.Replace(""", "\"")
.Replace("b", "\b")
.Replace("f", "\f")
.Replace("n", "\n")
.Replace("r", "\r")
.Replace("t", "\t");
var nonAsciiEscaped = jsonEscaped.Select((c) => c >= 127 ? "\u" + ((int)c).ToString("X").PadLeft(4, '0') : c.ToString());
return string.Join("", nonAsciiEscaped);
}

DotNetFiddle

(就像我说的,nonAsciiEscaped阶段可以省略,因为它不是严格必要的。(

最新更新