轻松驾驭JSON数据转换:常用函数与方法全解析**
在当今的软件开发领域,JSON(JavaScript Object Notation)作为一种轻量级、易读且易于解析的数据交换格式,已经成为了前后端交互、API通信、配置文件存储等场景下的主流选择,无论是将编程语言中的数据结构转换为JSON格式以便传输,还是将接收到的JSON数据解析为语言原生类型进行处理,都离不开相应的转换函数,转换JSON究竟该用什么函数呢?本文将为您详细解析在不同主流编程语言中,处理JSON转换的核心函数与方法。
JSON是什么,为何需要转换?
在函数之前,我们先简单回顾一下JSON,JSON是一种基于JavaScript语言标准子集的数据格式,它采用键值对的方式来组织数据,结构清晰,易于人阅读和编写,也易于机器解析和生成,常见的JSON数据结构包括对象({})和数组([])。
“转换JSON”通常包含两个核心操作:
- 序列化(Serialization):将编程语言中的原生数据结构(如Python的字典、Java的对象、JavaScript的对象)转换为JSON格式的字符串,这个过程也常被称为“编码”或“转为JSON”。
- 反序列化(Deserialization/Parse):将JSON格式的字符串解析为编程语言中的原生数据结构,这个过程也常被称为“解码”或“解析JSON”。
主流编程语言中的JSON转换函数
不同的编程语言提供了内置或库支持的函数来实现JSON的序列化和反序列化。
JavaScript (及其衍生语言如Node.js)
JavaScript作为JSON的起源,其处理JSON的方式最为原生和便捷。
-
序列化(对象/数组 → JSON字符串):
- 函数:
JSON.stringify(value[, replacer[, space]]) - 说明:
JSON.stringify()方法将一个JavaScript对象或数组转换为一个JSON字符串。value:要转换的对象或数组。replacer(可选):用于转换结果的函数或数组,如果是函数,则每个成员都会经过该函数处理;如果是数组,则只有包含在该数组中的属性名才会被转换。space(可选):用于美化输出的缩进字符串或数字,使JSON字符串更易读。
- 示例:
const obj = { name: "张三", age: 30, city: "北京" }; const jsonString = JSON.stringify(obj); console.log(jsonString); // 输出: {"name":"张三","age":30,"city":"北京"} console.log(JSON.stringify(obj, null, 2)); // 美化输出
- 函数:
-
反序列化(JSON字符串 → 对象/数组):
- 函数:
JSON.parse(text[, reviver]) - 说明:
JSON.parse()方法接收一个JSON字符串,并解析成一个JavaScript对象或数组。text:要解析的JSON字符串。reviver(可选):一个转换结果的函数,会在每个成员解析前调用。
- 示例:
const jsonString = '{"name":"李四","age":25,"city":"上海"}'; const obj = JSON.parse(jsonString); console.log(obj.name); // 输出: 李四
- 函数:
Python
Python标准库中的json模块提供了处理JSON数据的功能。
-
序列化(Python对象 → JSON字符串):
- 函数:
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw) - 说明:
json.dumps()(dump string) 将Python对象编码为JSON格式字符串,常用参数如indent用于格式化输出,ensure_ascii默认为True(非ASCII字符会转义),设为False则保留原字符。 - 示例:
import json data = {"name": "王五", "age": 28, "city": "广州"} json_str = json.dumps(data, indent=2, ensure_ascii=False) print(json_str) # 输出: # { # "name": "王五", # "age": 28, # "city": "广州" # }
- 函数:
-
反序列化(JSON字符串 → Python对象):
- 函数:
json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) - 说明:
json.loads()(load string) 将JSON格式字符串解码为Python对象(通常是字典或列表)。 - 示例:
import json json_str = '{"name": "赵六", "age": 35, "city": "深圳"}' data = json.loads(json_str) print(data["name"]) # 输出: 赵六
- 函数:
-
文件操作:
json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw):将Python对象序列化为JSON格式并写入文件对象fp。json(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):从文件对象fp中读取JSON数据并反序列化为Python对象。
Java
Java中处理JSON数据,通常会借助第三方库,如Gson (Google)、Jackson、org.json等,标准库中从Java 11开始引入了javax.json (但更推荐成熟的第三方库)。
-
以Gson为例:
-
序列化(Java对象 → JSON字符串):
-
方法:
new Gson().toJson(Object) -
说明:Gson的
Gson实例的toJson()方法可以将任意Java对象转换为JSON字符串,通常需要为Java对象定义好字段,或使用注解如@SerializedName。 -
示例:
import com.google.gson.Gson; class Person { String name; int age; String city; // 构造方法、getter/setter省略 } public class Main { public static void main(String[] args) { Person person = new Person("钱七", 40, "成都"); Gson gson = new Gson(); String jsonString = gson.toJson(person); System.out.println(jsonString); // 输出: {"name":"钱七","age":40,"city":"成都"} } }
-
-
反序列化(JSON字符串 → Java对象):
-
方法:
new Gson().fromJson(String, Class) -
说明:
fromJson()方法可以将JSON字符串解析为指定类型的Java对象。 -
示例:
import com.google.gson.Gson; class Person { /* 同上 */ } public class Main { public static void main(String[] args) { String jsonString = "{\"name\":\"孙八\",\"age\":22,\"city\":\"西安\"}"; Gson gson = new Gson(); Person person = gson.fromJson(jsonString, Person.class); System.out.println(person.name); // 输出: 孙八 } }
-
-
-
以Jackson为例 (非常流行):
- 序列化常用
ObjectMapper.writeValueAsString(Object) - 反序列化常用
ObjectMapper.readValue(String, Class)
- 序列化常用
C
.NET框架中处理JSON主要使用System.Text.Json命名空间(推荐,性能较好)或Newtonsoft.Json (第三方库,功能强大,历史悠久)。
-
以System.Text.Json为例 (.NET Core 3.0+, .NET 5+):
-
序列化:
-
方法:
JsonSerializer.Serialize(object? value, JsonSerializerOptions? options = null) -
示例:
using System.Text.Json; var person = new { Name = "周九", Age = 33, City = "重庆" }; string jsonString = JsonSerializer.Serialize(person); Console.WriteLine(jsonString); // 输出: {"Name":"周九","Age":33,"City":"重庆"}
-
-
反序列化:
-
方法:
JsonSerializer.Deserialize<TValue>(string json, JsonSerializerOptions? options = null) -
示例:
using System.Text.Json; string jsonString = "{\"Name\":\"吴十\",\"Age\":27,\"City\":\"青岛\"}"; var person = JsonSerializer.Deserialize<dynamic>(jsonString); // 或定义具体类 Console.WriteLine(person.Name); // 输出: 吴十
-
-



还没有评论,来说两句吧...