using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Nodes;
namespace MinecraftClient;
///
/// JSON utilities backed by System.Text.Json.
///
public static class Json
{
private static readonly JsonSerializerOptions s_escapeOptions = new()
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
///
/// Parse a JSON string into a mutable DOM.
///
public static JsonNode? ParseJson(string json) => JsonNode.Parse(json);
///
/// Escape a string for embedding inside a JSON string literal.
/// Uses System.Text.Json serialization and strips the surrounding quotes.
///
public static string EscapeString(string src) =>
JsonSerializer.Serialize(src, s_escapeOptions)[1..^1];
}
///
/// Extension helpers for that replicate the access patterns
/// of the former JSONData.StringValue property.
///
public static class JsonNodeExtensions
{
///
/// Return the string representation of any JSON value.
/// Strings are returned without quotes; numbers, booleans, and null
/// are returned as their text representation.
///
public static string GetStringValue(this JsonNode? node) => node switch
{
null => "null",
JsonValue val when val.TryGetValue(out var s) => s,
_ => node.ToJsonString()
};
}