dot-wild
Use powerful dot notation (dot path + wildcard) to manipulate properties of JSON.
Table of Contents
Install
$ npm install dot-wild --save
$ yarn add dot-wild
Usage
Basic
import * as dot from 'dot-wild';
dot.get({ foo: { bar: 'baz' } }, 'foo.bar');
dot.get({ 'foo.bar': 'baz' }, 'foo\\.bar');
dot.get({ 'foo.bar': 'baz' }, 'notfound', 'default');
const authorData = {
authors: [
{ username: 'tsuyoshiwada', profile: { age: 24 } },
{ username: 'sampleuser', profile: { age: 30 } },
{ username: 'foobarbaz', profile: { age: 33 } }
]
};
dot.get(authorData, 'authors.*.username');
dot.get(authorData, 'authors.*.profile.age');
dot.set({ foo: { bar: 'baz' } }, 'foo.bar', 'newvalue');
dot.set([{ foo: {} }], '0.foo.bar.baz', 'value');
const members = [
{ username: 'tsuyoshiwada', profile: { age: 24 } },
{ username: 'sampleuser', profile: { age: 30 } },
{ username: 'foobarbaz', profile: { age: 33 } }
];
dot.set(members, '*.id', 1);
dot.remove({ foo: { bar: 'baz' } }, 'foo.bar');
dot.remove(members, '*.profile');
dot.has({ foo: { bar: 'baz' } }, 'foo.bar');
dot.has(members, '*.profile.age');
dot.has({ foo: { bar: 'baz' } }, 'foo\\.bar');
dot.has(members, '*.notfound.key');
Advanced
import * as dot from 'dot-wild';
const postData = {
text: 'ok',
code: 200,
data: {
posts: [
{ id: 1, title: 'post 1' },
{ id: 2, title: 'post 2' }
],
tags: [
{ id: 1, name: 'tag 1' },
{ id: 2, name: 'tag 2' }
]
}
};
dot.flatten(postData);
dot.expand({ 'foo.bar': 'baz' });
dot.forEach(postData, 'data.posts.*.id', (value, key, context, path, data) => {
});
dot.map(postData, 'data.tags.*.name', (value, key, context, path, data) => {
return `${dot.get(data, path)} === ${value} (${key})`;
});
dot.tokenize('foo.bar.baz');
dot.tokenize('foo[1].2.*.bar\\.*.baz');
dot.matchPath('foo.bar', 'foo.bar');
dot.matchPath('foo.*.bar.*.baz', 'foo.5.bar.1.baz');
dot.escapePath('foo.bar');
dot.escapePath('foo\\.bar.baz');
dot.buildPath(['foo', 'bar', 'baz']);
dot.buildPath([1, '[2]', 3, '["foo"]', 'bar.baz']);
dot.containWildcardToken('foo.*.bar');
dot.containWildcardToken('*.foo.1');
dot.containWildcardToken('path.string');
dot.containWildcardToken('foo*bar');
API
See API Documetation.
All methods return a new object or array. (immutable)
get(data, path, [value, options]): Object | any[]
set(data, path, value): Object | any[]
remove(data, path): Object | any[]
has(data, path): boolean
flatten(data): Object
expand(data): Object | any[]
forEach(data, path, iteratee, options): void
map(data, path, iteratee, options): any[]
tokenize(path): string[]
matchPath(pathA, pathB): boolean
escapePath(path): string
buildPath(tokens)[]): string
containWilcardToken(path): boolean
data
type: Object | any[]
Original object or array. Destructive operation is not performed.
path
type: string
Path of the property in JSON object. Use the .
to select properties.
Separator in path syntax can be escaped by using the \\.
.
And, you can match arrays by using *
(wildcard).
value
type: any
Value to set at path or optional default value to return from get.
tokens
type: (string | number)[]
An array of tokens that make up the path.
options
This is an option for Getter method. (get
, forEach
. and map
)
{
iterateObject: true;
iterateArray: true;
}
Contribute
- Fork it!
- Create your feature branch: git checkout -b my-new-feature
- Commit your changes: git commit -am 'Add some feature'
- Push to the branch: git push origin my-new-feature
- Submit a pull request :D
Bugs, feature requests and comments are more than welcome in the issues.
License
MIT © tsuyoshiwada