JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁性和跨语言兼容性而被广泛应用于现代 Web 开发中。以下是关于 JSON 的详细分析:
API 数据传输
配置文件
package.json
、tsconfig.json
)。缓存数据存储
日志记录
移动端开发
NoSQL 数据库
轻量级 & 易读性
跨语言支持
json
模块、Java 的Jackson
)。原生 JavaScript 支持
灵活的数据结构
浏览器兼容性
JSON.parse()
和JSON.stringify()
。缺乏注释支持
类型系统有限
安全性风险
不适合大型数据
严格的格式要求
与 Web 标准深度整合
JSON Schema 标准化
与二进制格式共存
增强的类型支持
边缘计算与 JSON
ujson
、simdjson
)将更受欢迎。替代方案的竞争
JSON 凭借其简单性和通用性,仍将是 Web 数据交换的主流格式。未来,它可能通过标准化扩展(如 JSON Schema)和与二进制格式的互补,继续在不同场景中发挥核心作用。对于对性能要求极高的场景,二进制格式可能会逐渐普及,但 JSON 的易读性和广泛支持使其难以被完全取代。
在 C# 里实现 JSON 格式化校验,可借助Json.NET(Newtonsoft.Json)库来达成。下面为你详细介绍几种实现方式:
你可以使用JToken.Parse
方法来校验 JSON 的格式是否正确,若正确还能对其进行格式化。若 JSON 格式有误,该方法会抛出异常。
事项的详细的代码:
csharp
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static class JsonHelper
{
public static (bool isValid, string formattedJson, string errorMessage) ValidateAndFormat(string json)
{
try
{
// 解析JSON并自动验证格式
JToken parsedJson = JToken.Parse(json);
// 格式化JSON(使用缩进)
string formattedJson = parsedJson.ToString(Formatting.Indented);
return (true, formattedJson, null);
}
catch (JsonReaderException ex)
{
// 处理JSON格式错误
return (false, null, $"JSON格式错误: {ex.Message}");
}
catch (Exception ex)
{
// 处理其他异常
return (false, null, $"发生错误: {ex.Message}");
}
}
}
使用示例:
csharp
var result = JsonHelper.ValidateAndFormat("{\"name\":\"John\",\"age\":30}");
if (result.isValid)
{
Console.WriteLine("有效的JSON:");
Console.WriteLine(result.formattedJson);
}
else
{
Console.WriteLine("无效的JSON: " + result.errorMessage);
}
若你需要按照特定模式来校验 JSON,可使用 JsonSchema 进行验证。
csharp
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Schema; // 需要额外安装Newtonsoft.Json.Schema包
public static class JsonSchemaValidator
{
public static (bool isValid, string formattedJson, IList errors) ValidateAgainstSchema(string json, string schemaJson)
{
try
{
JToken jsonToken = JToken.Parse(json);
JSchema schema = JSchema.Parse(schemaJson);
// 验证JSON是否符合模式
bool isValid = jsonToken.IsValid(schema, out IList validationErrors);
string formattedJson = jsonToken.ToString(Formatting.Indented);
return (isValid, formattedJson, validationErrors);
}
catch (Exception ex)
{
return (false, null, new List { $"错误: {ex.Message}" });
}
}
}
使用示例:
csharp
string json = "{\"name\":\"John\",\"age\":30}";
string schema = @"{
""type"": ""object"",
""properties"": {
""name"": {""type"": ""string""},
""age"": {""type"": ""number""}
},
""required"": [""name""]
}";
var result = JsonSchemaValidator.ValidateAgainstSchema(json, schema);
if (result.isValid)
{
Console.WriteLine("有效的JSON且符合模式");
Console.WriteLine(result.formattedJson);
}
else
{
Console.WriteLine("无效的JSON:");
foreach (var error in result.errors)
{
Console.WriteLine("- " + error);
}
}
你还能通过自定义 JsonConverter 实现更复杂的校验逻辑。
csharp
public class AgeValidatorConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(int);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
int age = token.ToObject();
if (age < 0 || age > 150)
{
throw new JsonSerializationException("年龄必须在0到150之间");
}
return age;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(value);
}
}
// 使用自定义转换器
public class Person
{
public string Name { get; set; }
[JsonConverter(typeof(AgeValidatorConverter))]
public int Age { get; set; }
}
// 校验方法
public static (bool isValid, string formattedJson, string error) ValidateWithCustomRules(string json)
{
try
{
Person person = JsonConvert.DeserializeObject(json);
string formattedJson = JsonConvert.SerializeObject(person, Formatting.Indented);
return (true, formattedJson, null);
}
catch (JsonSerializationException ex)
{
return (false, null, ex.Message);
}
}
plaintext
Install-Package Newtonsoft.Json
Install-Package Newtonsoft.Json.Schema
性能考量:
在处理大型 JSON 文件时,建议使用 JsonTextReader 进行流式解析,以降低内存的使用量。
错误处理:
在实际的生产环境中,你可以根据具体需求自定义异常类型,或者记录更详细的错误日志。
借助上述方法,你能够在 C# 里实现 JSON 的校验和格式化,满足不同场景下的验证需求。
1.GitHub(托管)
GitHub - 512929249/smartsofthelp: SmartSoftHelp DeepCore XSuite 做世界一流的,最好的,最优秀,最简单,最流畅,最实用的.Net C#辅助开发工具SmartSoftHelp DeepCore XSuite 做世界一流的,最好的,最优秀,最简单,最流畅,最实用的.Net C#辅助开发工具 - 512929249/smartsofthelphttps://github.com/512929249/smartsofthelp.git
2.Gitee(码云)
SmartSoftHelp: SmartSoftHelp DeepCore XSuite做世界一流的,最好的,最优秀,最简单,最流畅,最实用的.Net C#辅助开发工具https://gitee.com/sky512929249/smartsofthelp.git
众里寻他千百度,蓦然回首,却在灯火阑珊处...