JSON 数据转换模式:映射、过滤和重塑

jsonjavascriptdata-transformationpatterns

转换 JSON 数据是开发者的日常工作。本指南涵盖最常用的转换模式。

映射 JSON 数组

转换数组中的每个项目:

const users = [

{ firstName: "Alice", lastName: "Smith", age: 30 },

{ firstName: "Bob", lastName: "Jones", age: 25 }

];

const names = users.map(u => ({

fullName: ${u.firstName} ${u.lastName},

isAdult: u.age >= 18

}));

过滤数据

移除不需要的项目:

const adults = users.filter(u => u.age >= 18);

const activeUsers = users.filter(u => u.status !== 'deleted');

按属性分组

按公共字段分组数据:

const groupBy = (arr, key) =>

arr.reduce((acc, item) => {

const group = item[key];

acc[group] = acc[group] || [];

acc[group].push(item);

return acc;

}, {});

// 按角色分组用户

const byRole = groupBy(users, 'role');

展平嵌套 JSON

将嵌套结构转换为扁平数组:

const data = {

users: [

{ name: "Alice", posts: [{id: 1}, {id: 2}] },

{ name: "Bob", posts: [{id: 3}] }

]

};

const allPosts = data.users.flatMap(u =>

u.posts.map(p => ({ ...p, author: u.name }))

);

选取和排除字段

// 选取特定字段

const pick = (obj, keys) =>

Object.fromEntries(keys.map(k => [k, obj[k]]));

// 排除特定字段

const omit = (obj, keys) =>

Object.fromEntries(Object.entries(obj).filter(([k]) => !keys.includes(k)));

const publicUser = omit(user, ['password', 'token']);

使用我们的 JSON 转 CSV 工具导出转换后的数据,或使用 JSON 查看器 检查结果。

相关工具