JSON Data Transformation Patterns: Map, Filter, and Reshape

jsonjavascriptdata-transformationpatterns

Transforming JSON data is a daily task for developers. This guide covers the most common transformation patterns.

Mapping JSON Arrays

Convert each item in an array:

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

}));

Filtering Data

Remove unwanted items:

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

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

Grouping by Property

Group data by a common field:

const groupBy = (arr, key) =>

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

const group = item[key];

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

acc[group].push(item);

return acc;

}, {});

// Group users by role

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

Flattening Nested JSON

Convert nested structures to flat arrays:

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 }))

);

Picking and Omitting Fields

// Pick specific fields

const pick = (obj, keys) =>

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

// Omit specific fields

const omit = (obj, keys) =>

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

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

Pivot Tables from JSON

Transform row data into summary tables:

const sales = [

{product: "A", month: "Jan", amount: 100},

{product: "B", month: "Jan", amount: 200},

{product: "A", month: "Feb", amount: 150}

];

const pivot = {};

sales.forEach(s => {

if (!pivot[s.product]) pivot[s.product] = {};

pivot[s.product][s.month] = s.amount;

});

Use our JSON to CSV converter when you need to export transformed data, or JSON Viewer to inspect results.

Related Tools