C# 语言 JSON 数据处理与解析

C#阿木 发布于 2025-06-12 8 次阅读


C 语言中的 JSON 数据处理与解析技术详解

随着互联网的快速发展,数据交换和传输变得日益频繁。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其易于阅读和编写、易于机器解析和生成等特点,被广泛应用于各种编程语言中。在C语言中,对JSON数据的处理与解析同样重要。本文将围绕C语言中的JSON数据处理与解析技术进行详细介绍,包括常用的库、方法以及实际应用场景。

一、C 中处理 JSON 数据的常用库

在C中,处理JSON数据主要依赖于以下几个库:

1. Newtonsoft.Json
2. System.Text.Json
3. Json.NET

1. Newtonsoft.Json

Newtonsoft.Json是最常用的JSON处理库之一,它支持JSON的序列化和反序列化。以下是Newtonsoft.Json的一些关键特性:

- 支持多种数据类型,如字符串、数字、布尔值、数组、对象等。
- 支持自定义序列化和反序列化。
- 支持JSON压缩和解压缩。
- 支持JSONPath查询。

2. System.Text.Json

System.Text.Json是.NET Core 3.0及以上版本中引入的一个新的JSON处理库。它具有以下特点:

- 高性能:System.Text.Json在性能上优于Newtonsoft.Json。
- 兼容性:System.Text.Json与.NET Core和.NET 5/6等平台兼容。
- 简洁性:System.Text.Json的API相对简洁。

3. Json.NET

Json.NET是另一个流行的JSON处理库,它基于Newtonsoft.Json。Json.NET具有以下特点:

- 支持LINQ查询。
- 支持JSONPath查询。
- 支持自定义序列化和反序列化。

二、C 中 JSON 数据的序列化与反序列化

1. 序列化

序列化是将对象转换为JSON字符串的过程。以下是一个使用Newtonsoft.Json进行序列化的示例:

csharp
using Newtonsoft.Json;

public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}

public static void Main()
{
Person person = new Person { Name = "张三", Age = 30 };
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);
}

2. 反序列化

反序列化是将JSON字符串转换为对象的过程。以下是一个使用Newtonsoft.Json进行反序列化的示例:

csharp
using Newtonsoft.Json;

public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}

public static void Main()
{
string json = "{"Name":"李四","Age":25}";
Person person = JsonConvert.DeserializeObject(json);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}

三、C 中 JSON 数据的查询

在C中,可以使用JSONPath查询JSON数据。以下是一个使用Json.NET进行JSONPath查询的示例:

csharp
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public static void Main()
{
string json = "{"Name":"张三","Age":30,"Children":[{"Name":"张小一","Age":5},{"Name":"张小二","Age":7}]}";
JObject jsonObject = JObject.Parse(json);
JArray children = jsonObject["Children"] as JArray;
foreach (var child in children.Children())
{
Console.WriteLine($"Name: {child["Name"]}, Age: {child["Age"]}");
}
}

四、C 中 JSON 数据的压缩与解压缩

在C中,可以使用System.Text.Encoding和System.IO.Compression进行JSON数据的压缩与解压缩。以下是一个示例:

csharp
using System;
using System.IO;
using System.IO.Compression;
using System.Text;

public static void Main()
{
string json = "{"Name":"张三","Age":30}";
byte[] compressedBytes = Compress(json);
byte[] decompressedBytes = Decompress(compressedBytes);
string decompressedJson = Encoding.UTF8.GetString(decompressedBytes);
Console.WriteLine(decompressedJson);
}

private static byte[] Compress(string json)
{
using (var memoryStream = new MemoryStream())
{
using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress))
{
var bytes = Encoding.UTF8.GetBytes(json);
gzipStream.Write(bytes, 0, bytes.Length);
}
return memoryStream.ToArray();
}
}

private static byte[] Decompress(byte[] compressedBytes)
{
using (var memoryStream = new MemoryStream(compressedBytes))
{
using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
{
var buffer = new byte[4096];
using (var outputMemoryStream = new MemoryStream())
{
int bytesRead;
while ((bytesRead = gzipStream.Read(buffer, 0, buffer.Length)) > 0)
{
outputMemoryStream.Write(buffer, 0, bytesRead);
}
return outputMemoryStream.ToArray();
}
}
}
}

五、总结

本文详细介绍了C语言中的JSON数据处理与解析技术,包括常用的库、序列化与反序列化、查询、压缩与解压缩等。在实际开发中,根据具体需求选择合适的库和工具,可以有效地处理JSON数据,提高开发效率。