Skip to content

Repository files navigation

Build Status

Dot-Object

Dot-Object makes it possible to transform javascript objects using dot notation.

Installation

Install from npm:

 npm install dot-object --save

Install from bower:

 bower install dot-object --save

Download

Usage

Move a property within one object to another location

vardot=require('dot-object');varobj={'first_name': 'John','last_name': 'Doe'};dot.move('first_name','contact.firstname',obj);dot.move('last_name','contact.lastname',obj);console.log(obj);{contact: {firstname: 'John',lastname: 'Doe'}}

Copy property from one object to another

vardot=require('dot-object');varsrc={name: 'John',stuff: {phone: {brand: 'iphone',version: 6}}};vartgt={name: 'Brandon'};dot.copy('stuff.phone','wanna.haves.phone',src,tgt);console.log(tgt);{name: 'Brandon',wanna: {haves: {phone: {brand: 'iphone',version: 6}}}}

Transfer property from one object to another

Does the same as copy but removes the value from the source object:

dot.transfer('stuff.phone','wanna.haves.phone',src,tgt);// src: {"name":"John","stuff":{}}// tgt: {"name":"Brandon","wanna":{"haves":{"phone":{"brand":"iphone","version":6}}}

Expand to an object

vardot=require('dot-object');varrow={'id': 2,'contact.name.first': 'John','contact.name.last': 'Doe','contact.email': 'example@gmail.com','contact.info.about.me': 'classified','devices[0]': 'mobile','devices[1]': 'laptop','some.other.things.0': 'this','some.other.things.1': 'that'};dot.object(row);console.log(row);{"id": 2,"contact": {"name": {"first": "John","last": "Doe"},"email": "example@gmail.com","info": {"about": {"me": "classified"}}},"devices": ["mobile","laptop"],"some": {"other": {"things": ["this","that"]}}}

To convert manually per string use:

vardot=require('dot-object');vartgt={val: 'test'};dot.str('this.is.my.string','value',tgt);console.log(tgt);{"val": "test","this": {"is": {"my": {"string": "value"}}}}

Pick a value using dot notation:

Picks a value from the object without removing it.

vardot=require('dot-object');varobj={some: {nested: {value: 'Hi there!'}}};varval=dot.pick('some.nested.value',obj);console.log(val);Hithere!

Delete/Remove a value using dot notation:

Remove and delete mostly behave the same, but in case of a path addressing array items:

  • delete will re-index the array.
  • remove will retain array indexes
vardot=require('dot-object');varobj={a: 'Hi There!',nested: {array: ['Veni','Vidi','Vici',]}};varval=dot.delete('a',obj);console.log(val);HiThere!// To remove an item and directly update any array indexes use:varval=dot.delete('nested.array[1]',obj);console.log(val);Vidi// Remove a value but retain array indexes. varval=dot.remove('nested.array[1]',obj);// To remove multiple paths at once:varval=dot.remove(['nested.array[0]','nested.array[2]'],obj);

Using modifiers

You can use modifiers to translate values on the fly.

This example uses the underscore.string library.

vardot=require('dot-object');var_s=require('underscore.string');varrow={'nr': 200,'doc.name': ' My Document '};varmods={"doc.name": [_s.trim,_s.underscored],};dot.object(row,mods);console.log(row);
{
"nr": 200,
"doc": {
"name": "my_document"
}
}

Or using .str() directy:

vardot=require('dot-object');var_s=require('underscore.string');varobj={id: 100};// use one modifierdot.str('my.title','this is my title',obj,_s.slugify);// multiple modifiersdot.str('my.title',' this is my title ',obj,[_s.trim,_s.slugify]);console.log(obj);

Result:

{
"id": 100,
"my": {
"title": "this-is-my-title"
}
}

Transform object

vardot=require('dot-object');varsource={"id": 1,"contact": {"firstName": "John","lastName": "Doe","email": "example@gmail.com",}}varrecipe={'id': 'nr','contact.firstName': 'name.first','contact.lastName': 'name.last','contact.email': 'email'};vartgt={}dot.transform(recipe,source,tgt);// ORvartgt=dot.transform(recipe,source);console.log(tgt);{"nr": 1,"name": {"first": "John","last": "Doe"},"email": "example@gmail.com"}

Convert object to dotted-key/value pair

vardot=require('dot-object');varobj={id: 'my-id',nes: {ted: {value: true}},other: {nested: {stuff: 5}},some: {array: ['A','B']}};vartgt=dot.dot(obj);// orvartgt={};dot.dot(obj,tgt);console.log(tgt);

Result:

{
"id": "my-id",
"nes.ted.value": true,
"other.nested.stuff": 5,
"some.array[0]": "A",
"some.array[1]": "B"
}

Keep array

Set keepArray to true.

vardot=require('dot-object');varobj={id: 'my-id',other: [1,2,3],some: {array: ['A','B']}};dot.keepArray=true;vartgt=dot.dot(obj);console.log(tgt);

Result:

{
"id": "my-id",
"other": [1, 2, 3],
"some.array": ["A", "B"]
}

Using a different separator

If you do not like dot notation, you are free to specify a different separator.

varDot=require('dot-object');vardot=newDot('->');var_s=require('underscore.string');varrow={'nr': 200,'doc->name': ' My Document '};varmods={"doc->name": [_s.trim,_s.underscored],};dot.object(row,mods);console.log(row);
{
"nr": 200,
"doc": {
"name": "my_document"
}
}

Transforming SQL results to JSON

SQL translation on the fly:

// TODO

Copyright © 2013 Rob Halff, released under the MIT license

About

Transform json objects using dot notation

Resources

Stars

479 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages