如何将多条数据转换为JSON:实用指南与代码示例
在软件开发中,JSON(JavaScript Object Notation)因其轻量级、易读性和广泛的语言支持,已成为数据交换的主流格式,无论是前端与后端的接口通信、数据库数据的序列化存储,还是配置文件的读写,将多条数据转换为JSON都是常见需求,本文将系统介绍“怎么把多条数据转成JSON”,涵盖不同场景下的实现方法、代码示例及注意事项。
理解“多条数据”与JSON的对应关系
在转换前,需明确“多条数据”的原始形态与JSON的目标结构,常见的“多条数据”形式包括:
- 数据库查询结果(如MySQL、PostgreSQL的
SELECT返回的多行记录) - 编程语言中的集合对象(如Python的列表、Java的List、C#的数组等)
- 文件中的多行记录(如CSV、TXT格式的结构化数据)
JSON本身是一种键值对结构,其支持“多条数据”的核心形式有两种:
- JSON数组:将多条数据作为数组的元素,每个元素是一个JSON对象(代表单条数据),这是最常用的形式,适合表示“同类数据的集合”(如用户列表、订单列表)。
[ {"id": 1, "name": "Alice", "age": 25}, {"id": 2, "name": "Bob", "age": 30} ] - 嵌套JSON对象:以某个键为容器,包含多条数据(较少见,需提前约定键名)。
{ "users": [ {"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"} ] }
后续将围绕JSON数组这一主流形式展开,说明不同场景下的转换方法。
常见场景下的转换方法
编程语言中:将集合对象转换为JSON
几乎所有主流编程语言都内置了JSON序列化库(或第三方库),可将列表、数组等集合对象直接转换为JSON数组,以下是几种常见语言的实现示例:
(1)Python:使用json库
Python的json模块提供了dumps()方法,可将列表(列表元素为字典)转换为JSON字符串。
import json
# 原始数据:Python列表,每个元素是字典(代表单条记录)
data = [
{"id": 1, "name": "Alice", "age": 25},
{"id": 2, "name": "Bob", "age": 30},
{"id": 3, "name": "Charlie", "age": 35}
]
# 转换为JSON字符串(ensure_ascii=False确保非英文字符正常显示,indent=4格式化输出)
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str)
输出结果:
[
{
"id": 1,
"name": "Alice",
"age": 25
},
{
"id": 2,
"name": "Bob",
"age": 30
},
{
"id": 3,
"name": "Charlie",
"age": 35
}
]
(2)Java:使用Jackson或Gson库
Java中常用Jackson或Gson库处理JSON,以Jackson为例:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class JsonConversion {
public static void main(String[] args) throws Exception {
// 原始数据:Java List,每个元素是Map(或自定义对象)
List<Map<String, Object>> data = new ArrayList<>();
data.add(Map.of("id", 1, "name", "Alice", "age", 25));
data.add(Map.of("id", 2, "name", "Bob", "age", 30));
// 创建ObjectMapper实例
ObjectMapper mapper = new ObjectMapper();
// 转换为JSON字符串(格式化输出)
String jsonStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(data);
System.out.println(jsonStr);
}
}
输出结果(与Python示例类似,注意Java的Map.of()需Java 9+)。
(3)JavaScript/TypeScript:原生JSON方法
JavaScript中可直接使用JSON.stringify()将数组转换为JSON字符串:
// 原始数据:JavaScript数组,元素为对象
const data = [
{ id: 1, name: "Alice", age: 25 },
{ id: 2, name: "Bob", age: 30 },
{ id: 3, name: "Charlie", age: 35 }
];
// 转换为JSON字符串(第二个参数为null,第三个参数为缩进空格数)
const jsonStr = JSON.stringify(data, null, 2);
console.log(jsonStr);
输出格式与Python、Java一致。
(4)C#:使用System.Text.Json
.NET Core 3.0+内置了System.Text.Json库,无需额外安装:
using System.Text.Json;
using System.Collections.Generic;
var data = new List<Dictionary<string, object>>
{
new Dictionary<string, object> { { "id", 1 }, { "name", "Alice" }, { "age", 25 } },
new Dictionary<string, object> { { "id", 2 }, { "name", "Bob" }, { "age", 30 } }
};
// 转换为JSON字符串(WriteIndented=true格式化)
string jsonStr = JsonSerializer.Serialize(data, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(jsonStr);
数据库中:将查询结果转换为JSON
许多现代数据库(如MySQL 5.7+、PostgreSQL、SQL Server)支持直接将查询结果转换为JSON格式,无需在应用层手动处理。
(1)MySQL:使用JSON_ARRAYAGG()和JSON_OBJECT()
-- 查询用户表并转换为JSON数组
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'id', id,
'name', name,
'age', age
)
) AS users_json
FROM users;
说明:
JSON_OBJECT(key1, value1, key2, value2, ...):生成单个JSON对象(代表单条记录)。JSON_ARRAYAGG(...):将多个JSON对象聚合成JSON数组。
(2)PostgreSQL:使用json_agg()和to_jsonb()
-- 查询用户表并转换为JSON数组
SELECT json_agg(
jsonb_build_object(
'id', id,
'name', name,
'age', age
)
) AS users_json
FROM users;
说明:
jsonb_build_object():构建JSONB对象(PostgreSQL特有,支持二进制存储,效率更高)。json_agg():聚合JSON对象为数组。
(3)SQL Server:使用FOR JSON PATH
-- 查询用户表并转换为JSON数组 SELECT id, name, age FROM users FOR JSON PATH;
说明:FOR JSON PATH会将查询结果自动转换为JSON数组,列名作为键名。
文件处理中:将多行数据转换为JSON
(1)CSV文件转换为JSON
假设有一个users.csv如下:
id,name,age 1,Alice,25 2,Bob,30 3,Charlie,35
可通过Python的csv和json库处理:
import csv
import json
# 读取CSV文件
with open('users.csv', 'r', encoding='utf-8') as csv_file:
csv_reader = csv.DictReader(csv_file) # 以第一行作为键名
data = list(csv_reader) # 转换为列表(每行是一个字典)
# 写入JSON文件
with open('users.json', 'w', encoding='utf-8') as json_file:
json.dump(data, json_file, ensure_ascii=False, indent=4)
print("CSV转JSON完成!")
生成的users.json内容与前面的Python示例一致。
(2)TXT文件(每行一条JSON)转换为JSON数组
若users.txt文件每行是一个独立的JSON对象(如{"id":1,"name":"Alice"}),可通过以下代码合并为JSON数组:
import json
# 读取TXT文件,每行解析为JSON对象
with open('users.txt', 'r', encoding='utf-8') as txt_file:
data = [json.loads(line.strip()) for line in txt_file if line.strip()]
# 写入JSON数组
with open('users_array.json', 'w', encoding='utf-8') as json_file:
json.dump(data, json_file, ensure_ascii=False, indent=


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