Skip to content

A simple javascript library that flattens a json structured object and then creates duplicate objects off of each nested array elements.

License

Notifications You must be signed in to change notification settings

gone369/json-spread

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Json-Spread

npm license github-issues npm-downloads

Description

A simple javascript library that flattens a json structured object and then creates duplicate objects off of each nested array elements.

Great for converting nested, multi-leveled json to single level json that can be used to create csv,tsv,excel or other row column structured data.

Installation

Node

npm install json-spread

Browser

include the jsonSpread.min.js file from the dist folder

Usage

var jsonSpread = require('json-spread');
var output = jsonSpread({
  "a": [
    {
      "index": 1
    },
    {
      "index": 2
    },
    {
      "index": 3
    }
  ]
})
/*
output = [
  {
    "a.index": 1
  },
  {
    "a.index": 2
  },
  {
    "a.index": 3
  }
]
*/

Examples

nested array

//input
{
  "a": [
    1,
    2,
    3
  ],
  "b": {
    "a": [
      1,
      2,
      3
    ]
  }
}
//output
[
  {
    "a":1
  },
  {
    "a":2
  },
  {
    "a":3
  },
  {
    "b.a":1
  },
  {
    "b.a":2
  },
  {
    "b.a":3
  }
]

nested arrays within nested objects

//input
{
  "a": {
    "b": {
      "c": {
        "d": {
          "e" : {
            "array": [
              1,
              2,
              3
            ]
          }
        }
      }
    }
  }
}
//output
[
  {
    "a.b.c.d.e.array": 1
  },
  {
    "a.b.c.d.e.array": 2
  },
  {
    "a.b.c.d.e.array": 3
  }
]

real life example

//input
[
  {
    "user_id" : 1,
    "email": "1@domain.com",
    "hobbies": [
      {
        "type": "sport",
        "name": "soccer",
        "dates": [
          "May 3rd",
          "May 4th",
          "May 5th"
        ]
      },
      {
        "type": "sport",
        "name": "basketball",
        "dates": [
          "June 3rd",
          "July 4th"
        ]
      }
    ]
  },
  {
    "user_id" : 2,
    "email": "2@domain.com"
  },
  {
    "user_id" : 3,
    "email": "3@domain.com",
    "hobbies": []
  }
]
//output
[{
	"user_id": 1,
	"email": "1@domain.com",
	"hobbies.type": "sport",
	"hobbies.name": "soccer",
	"hobbies.dates": "May 3rd"
}, {
	"user_id": 1,
	"email": "1@domain.com",
	"hobbies.type": "sport",
	"hobbies.name": "soccer",
	"hobbies.dates": "May 4th"
}, {
	"user_id": 1,
	"email": "1@domain.com",
	"hobbies.type": "sport",
	"hobbies.name": "soccer",
	"hobbies.dates": "May 5th"
}, {
	"user_id": 1,
	"email": "1@domain.com",
	"hobbies.type": "sport",
	"hobbies.name": "basketball",
	"hobbies.dates": "June 3rd"
}, {
	"user_id": 1,
	"email": "1@domain.com",
	"hobbies.type": "sport",
	"hobbies.name": "basketball",
	"hobbies.dates": "July 4th"
}, {
	"user_id": 2,
	"email": "2@domain.com"
}, {
	"user_id": 3,
	"email": "3@domain.com",
	"hobbies": null
}]

Options

Fields

delimiter

specify the delimiting value for nested objects.

var data = { "a": { "b" : "foo"} };
var options = {
  delimiter : "*" //default is '.'
}
var output = jsonSpread(data,options);
//output
{
  "a*b" : "foo"
}
removeEmptyArray

removes empty arrays

var data = { "a": "value_a" , "b": []};
var options = {
  removeEmptyArray: true //default is false
}
var output = jsonSpread(data,options);
//output
{
  "a" : "value_a"
}
emptyValue

you can define the value for empty arrays in options.
this is ignored if removeEmptyArray is true

var data = { "a": [] };
var options = {
  emptyValue: "EMPTY" //default is null
}
var output = jsonSpread(data,options);
//output
{
  "a" : "EMPTY"
}

Contributing

installation

Fork it, then do an npm install. everything should be in there

building

after writing in src folder, do:

npm run dist

to see if it builds

tests

I use mocha and chai to test.

npm test

write tests in /test folder.

Dependencies

This library currently depends on flat

License

MIT License

About

A simple javascript library that flattens a json structured object and then creates duplicate objects off of each nested array elements.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published