npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

groupby-cli

v0.2.1

Published

Split up JSON data into multiple files based on shared characteristics.

Downloads

289

Readme

groupby

Build Status

Split up JSON data into multiple files based on shared characteristics. Groupby is a command-line utility but can also be used from node.js.

groupby staff.json 'staff/{department}.json'

In the example above, the resulting output will one file for each department, each file containing an array of staff member objects for that department.

Installation

npm install groupby-cli -g

Usage

Groupby expects an input JSON file that contains an array of similarly-structured objects, and will group those objects when they have matching values for whatever keys you specify as placeholders in the output pattern.

For example, staff/{department}.json will group objects together into the same file if their department key matches.

Grouping on multiple keys is supported too:

groupby staff.json 'staff/{department}/{country}/{role}.json'

The only requirement for groups is that values can be turned into a string (and thus into a filename to which we can write the resulting JSON.) Values will be slugified for use in filenames but will be left as-is in the JSON.

In some cases, your output pattern uniquely identifies each individual object, e.g.

groupby staff.json 'staff/{username}.json'

To save just the objects without wrapping each of them in an array, use the --unique flag. In --unique mode, Groupby will throw an error if your output pattern does unexpectedly lead to groups that contain more than one item.

Use from node.js

// basic usage
var groupby = require('groupby-cli');
var groups = groupby.group(list, facets);

// usage that is more advanced, and more 
// similar to the command-line
var keyPattern = 'staff/{departments}';
var staffByDepartment = groupby.group(staff, keyPattern);
var sales = staffByDepartment['staff/sales'];

groupby.group takes an options object as a third argument:

  • underscore to underscore the slugified keys
    • false by default
    • when using the command-line interface, this is always set to true
  • catch
    • false (default) to throw an error when encountering an uncategorizable object (this happens when not all objects contain a value for the specified facets)
    • true: don't throw such errors and just get rid of any uncategorizable objects
    • "destination": create a group with all uncategorizable objects at the specified key

License

Groupby comes with a permissive ISC license.

The countries.json dataset included among the examples comes with an Open Database License. For the latest version, see @mledoze's countries repository on GitHub.