Schema

The "Schema" function is a great way to reconfigure your json data and make it your own.

Github repository for your stars.

Usage

Install

$ npm install json-function

Import

import { schema } from 'json-function';

Usage

Example Data

const data = [
{
id: 0,
user: {
firstname: "John",
lastname: "Doe"
},
title: "Book Name"
},
{
id: 1,
user: {
firstname: "Johnny",
lastname: "Doe"
},
title: "Book Name 2"
}
];

Syntax

schema(data, {
book: {
id: "id",
title: "title"
},
firstname: "user.firstname",
lastname: "user.lastname"
});

Output

[
{
firstname: "John",
lastname: "Doe",
book: {
id: 0,
title: "Book Name"
}
},
{
firstname: "Johnny",
lastname: "Doe",
book: {
id: 1,
title: "Book Name 2"
}
}
];

Apart from this wonderful method, there are also some advanced uses.

Schema has a calback that hosts useful tools.

Example Data

const data = [
{
id: 0,
user: {
firstname: "John",
lastname: "Doe"
},
title: "Book Name"
},
{
id: 1,
user: {
firstname: "Johnny",
lastname: "Doe"
},
title: "Book Name 2"
}
];

Syntax

join()

The default separator is a space.

schema(data, (sc) => ({
id: 'id',
fullName: sc.join('user.firstname', 'user.lastname')
}));

Output

[
{
id: 0,
fullName: "John Doe"
},
{
id: 1,
fullName: "Johnny Doe"
}
];

To use a custom separator.

schema(data, (sc) => ({
id: 'id',
fullName: sc.join('user.firstname', 'user.lastname', { separator: '_' })
}));

Output

[
{
id: 0,
fullName: "John_Doe"
},
{
id: 1,
fullName: "Johnny_Doe"
}
];

custom()

Example Data

const data = [
{
id: 0,
createdAt: "2019-03-07T19:22:36+00:00",
user: {
firstname: "Aykut",
lastname: "Kardaş"
}
},
{
id: 1,
createdAt: "2019-03-02T19:22:36+00:00",
user: {
firstname: "John",
lastname: "Doe"
}
}
];

Usage

schema(data, sc => ({
id: "id",
fullName: sc.custom(
(firstname, lastname) => `${firstname.toUpperCase()} ${lastname.toUpperCase()}`,
"user.firstname",
"user.lastname"
),
createdAt: sc.custom(
createdAt => moment(createdAt).format("MM/DD/YYYY"),
"createdAt"
),
idIncrement: sc.custom(id => id + 1, "id")
}));

Output

[
{
id: 0,
fullName: "AYKUT KARDAŞ",
createdAt: "03/07/2019",
idIncrement: 1
},
{
id: 1,
fullName: "JOHN DOE",
createdAt: "03/02/2019",
idIncrement: 2
}
]