商城首页欢迎来到中国正版软件门户

您的位置:首页 >json序列化和反序列化方法 _ JSON序列化与反序列化的常用方法及框架对比

json序列化和反序列化方法 _ JSON序列化与反序列化的常用方法及框架对比

  发布于2026-04-21 阅读(0)

扫一扫,手机访问

一、Python标准库json模块

如果你需要一个零依赖、开箱即用的方案,Python内置的json模块无疑是首选。它轻量、直接,处理基础数据类型转换完全够用。

上手非常简单,第一步就是导入:import json

想把一个Python字典变成JSON字符串?一行代码搞定:json_str = json.dumps({'name': 'Alice', 'age': 30})

反过来,把JSON字符串“变回”Python对象同样轻松:data = json.loads(json_str)

当然,它也有局限性。遇到日期时间这类非标准支持的类型时,你就得自己动手了——需要定义继承自json.JSONEncoderjson.JSONDecoder的子类,然后在调用dumpsloads时,通过cls参数把这个自定义类传进去。

二、Pydantic结构化模型

当数据校验和类型安全成为首要考虑时,Pydantic就该登场了。它绝不仅仅是个序列化工具,更是一个通过类型注解强制执行数据验证的“守门员”。在序列化和反序列化的同时,字段验证、默认值填充、类型转换一气呵成,非常适合对数据可靠性要求高的业务场景。

首先,通过pip install pydantic安装它。

接着,定义一个继承自BaseModel的类,用类型注解声明字段:class User(BaseModel): name: str; age: int

实例化后,调用.model_dump()方法就能得到字典,完成序列化:u = User(name='Bob', age=25); dict_data = u.model_dump()

反序列化则用.model_validate(),无论是字典还是JSON字符串,都能构造出经过校验的实例:u2 = User.model_validate({'name': 'Carol', 'age': 28})

三、Ja va平台Jackson库

在Ja va世界里,Jackson几乎是处理JSON的事实标准。它功能强大、高度可配置,支持注解驱动和流式API,是Spring Boot等企业级框架的默认选择,灵活性和扩展性都堪称一流。

通常,通过Ma ven引入依赖:com.fasterxml.jackson.corejackson-databind

核心是ObjectMapper这个类,先创建一个实例:ObjectMapper mapper = new ObjectMapper();

序列化对象到JSON字符串:String json = mapper.writeValueAsString(new Person("Da vid", 32));

反序列化回指定类型的对象:Person p = mapper.readValue(json, Person.class);。整个过程,注解可以帮你精细控制字段的映射和行为。

四、.NET平台System.Text.Json

对于.NET开发者,System.Text.Json是官方钦点的现代方案。自.NET Core 3.0起内置,它主打高性能和低内存占用,在吞吐量上表现优异,已经逐步取代了经典的Newtonsoft.Json。

首先,引用命名空间:using System.Text.Json;

序列化时,可以直接将C#对象转为UTF-8字节数组,效率很高:byte[] utf8Json = JsonSerializer.SerializeToUtf8Bytes(new Product { Id = 101, Name = "Laptop" });

反序列化同样直接:Product product = JsonSerializer.Deserialize(utf8Json);

通过JsonSerializerOptions可以轻松自定义行为,比如忽略空值或使用驼峰命名:var options = new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, PropertyNamingPolicy = JsonNamingPolicy.CamelCase };

五、Ja vaScript原生API

在Ja vaScript的地盘上,处理JSON是最自然不过的事,因为浏览器和Node.js环境都原生提供了全局的JSON对象,无需任何额外依赖。

把对象或数组变成字符串,用JSON.stringify()const jsonStr = JSON.stringify({ name: "Tom", scores: [95, 87] });

这个方法很灵活,你可以传入一个replacer函数来过滤或转换序列化的字段,比如隐藏密码:JSON.stringify(obj, (key, value) => key === 'password' ? undefined : value)

还可以用space参数让输出格式更美观,便于调试:JSON.stringify(data, null, 2)

反过来,解析JSON字符串用JSON.parse()const obj = JSON.parse(jsonStr);

它同样支持一个reviver函数,让你能在解析过程中对每个属性进行预处理,比如把字符串年龄转为数字:JSON.parse(jsonStr, (key, value) => key === 'age' ? Number(value) : value)

六、R语言jsonlite包

对于用R进行数据分析或与Web API交互的开发者来说,jsonlite包是处理JSON的稳定之选。它非常成熟,支持自动类型推断,能巧妙地将嵌套结构扁平化,输出对API友好的格式。

安装并加载包:install.packages("jsonlite"); library(jsonlite)

将R的命名列表序列化为JSON字符串:toJSON(list(name = "Anna", age = 29), auto_unbox = TRUE)。这里的auto_unbox参数很重要,能自动将单元素向量从数组中解包。

想让输出的JSON更易读?设置pretty = TRUE即可:toJSON(data, pretty = TRUE)

反序列化用fromJSONfromJSON('{"name":"Leo","score":92}')

处理嵌套的JSON时,它的一个强大功能是能自动展开并转换为R中常用的data.frame结构,非常方便:fromJSON(json_text, simplifyDataFrame = TRUE)

本文转载于:https://www.php.cn/faq/2325839.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注