describe-json

Describes a JSON object metadata

describe-json

The library takes a JSON object and returns it's metadata in several useful ways.
I've developed this package as part of the joola.io project to handle the transformation of JSON rich documents into NoSQL datastores. This process requires some descriptive attributes for each of the JSON nodes and this library assists in this process.

describe-json uses two libraries for traversing the JSON and parsing its metadata, traverse which iterates over the JSON object and kindof which is used to determine the typeof the value.

var djson = require('describe-json'); 
var obj = {
  number: 1,
  string: 'string',
  date: new Date(),
  array: [1, '2', [1, 2]],
  nested: {
    number: 1,
    string: 'string',
    date: new Date()
  }
};
console.log(djson.describe(obj));

Results with

{ number: 'number',
  string: 'string',
  date: 'date',
  array: [ 'number', 'string', [ 'number', 'number' ] ],
  nested: { number: 'number', string: 'string', date: 'date' } 
}
$ npm install describe-json

Generates a metadata representation of the provided JSON object.

Accepts obj which is a JSON object and traverses it to return another JSON object containing the metadata.

  • Arrays are returned with their contents expanded and each replaced with the metadata of the array item value.
  • Strings are parsed in attempt to cast them as a valid date.
  • Root is not parsed and returned.
var djson = require('describe-json'); 
var obj = {
  number: 1,
  string: 'string',
  date: new Date(),
  array: [1, '2', [1, 2]],
  nested: {
    number: 1,
    string: 'string',
    date: new Date()
  }
};
console.log(djson.describe(obj));

Results with

{ number: 'number',
  string: 'string',
  date: 'date',
  array: [ 'number', 'string', [ 'number', 'number' ] ],
  nested: { number: 'number', string: 'string', date: 'date' } 
}

Returns an array of [key, value] containing all leaf node values.

var obj = {
  level0: 1,
  a: {
    b: {
      c: {
        d: 1
      }
    }
  },
  aa: {
    bb: ['cc']
  }
};

Results with:

[ 
  [ 'level0', 1 ], 
  [ 'a.b.c.d', 1 ], 
  [ 'aa.bb', [ 'cc' ] ] 
]

I would love to get your help and have outlined a simple Contribution Policy to support a transparent and easy merging of ideas, code, bug fixes and features. If you're looking for a place to start, you can always go over the list of open issues, pick one and get started. If you're feeling lost or unsure, just let me know.

###License Copyright (c) 2014 Itay Weinberger. MIT Licensed, see LICENSE for details.