繁体   English   中英

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

[英]How to convert a string to JSON friendly string?

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

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

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

所以@someValue 应该是 javascript 安全的,比如双引号,如果需要的话可以转义字符等等。

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

新的 System.Text.Json 有什么东西吗?

我试过这个:

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

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

还有另一种解析方法吗?

escaping 字符串使它们 JSON 安全的规则如下:

  • 退格替换为 \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);
}

点网提琴

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM