使用.NET缩小json字符串

ne5o7dgx  于 2023-02-01  发布在  .NET
关注(0)|答案(4)|浏览(152)

如何清理/缩小现有的json字符串?我见过使用正则表达式的情况。有没有其他(可能更有效的)方法?

brjng4g3

brjng4g31#

Install-Package Newtonsoft.Json

只需解析它,然后序列化回JSON:

var jsonString = "  {  title: \"Non-minified JSON string\"  }  ";
var obj = JsonConvert.DeserializeObject(jsonString);
jsonString = JsonConvert.SerializeObject(obj);

SerializeObject(obj, Formatting.None)方法接受Formatting枚举作为第二个参数。您总是可以选择是使用Formatting.Indented还是Formatting.None

yhqotfr8

yhqotfr82#

使用System.Text.Json的非常基本的扩展方法

using System.Text.Json;
using static System.Text.Json.JsonSerializer;

public static class JsonExtensions
{
    public static string Minify(this string json)
        => Serialize(Deserialize<JsonDocument>(json));
}

这将利用JsonSerializerOptions的默认值

JsonSerializerOptions.WriteIndented = false
ccrfmcuu

ccrfmcuu3#

var minified = Regex.Replace ( json, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1" );

从此处找到:https://github.com/MatthewKing/JsonFormatterPlus/blob/master/src/JsonFormatterPlus/JsonFormatter.cs

vfwfrxfs

vfwfrxfs4#

如果您使用的是System.Text.Json,那么应该可以:

private static string Minify(string json)
{
    var options =
        new JsonWriterOptions
        {
            Indented = false,
            Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
        };
    using var document = JsonDocument.Parse(json);
    using var stream = new MemoryStream();
    using var writer = new Utf8JsonWriter(stream, options);
    document.WriteTo(writer);
    writer.Flush();
    return Encoding.UTF8.GetString(stream.ToArray());
}

Encoder选项不是必需的,但我最终还是采用了这种方法,这样字符就不会那么频繁地转义。例如,当使用默认编码器时,+会被\u002B44替换。

相关问题