json-remote-search

0.9.4 • Public • Published

json-remote-search

Build Status

Downloads remote json, keeps cache and provides searching api for it

Install via npm

$ npm install json-remote-search

API

var options = {
  url: 'http://www.json-generator.com/api/json/get/bVfgyCTYLC',
  expires: 3000 //3000 milliseconds
};
var jsonRemoteSearch = require('json-remote-search')(options);
 
jsonRemoteSearch('[*]')
   .then(function(result){
      console.log(result) //=> {value: 'Matt', parents: [...], key: 0} ... etc
   })
   .catch(function(err){
      throw err; 
   });
 

jsonRemoteSearch(query)

Specify a query and what to query. Returns an object that describes the result of the query.

 
var options = {
  url: 'http://www.json-generator.com/api/json/get/cqioHcrnKG?indent=2',
  expires: 3000 //3000 milliseconds
};
var jsonRemoteSearch = require('json-remote-search')(options);
 
/*
{
  people: [
    {name: 'Matt', country: 'NZ'},
    {name: 'Pete', country: 'AU'},
    {name: 'Mikey', country: 'NZ'}
  ]
}
*/
 
jsonRemoteSearch('people[country=NZ].name')
   .then(function(result){
      console.log(result) //=> {value: 'Matt', parents: [...], key: 0} ... etc
   })
   .catch(function(err){
      throw err; 
   });

Options:

  • url : url to download json file from.
  • expires or context (optional): mention expiry time for downloading file again (till the point it stays in memory).
  • data (optional): if you dont want to use url, you can just use data which is already existing.

Queries

Queries are strings that describe an object or value to pluck out, or manipulate from the context object. The syntax is a little bit CSS, a little bit JS, but pretty powerful.

Accessing properties (dot notation)

person.name

Array accessors

people[0]

Array pluck

people.name => return all the names of people

Get all values of a lookup

lookup[*]

Array filter

By default only the first matching item will be returned:

people[name=Matt]

But if you add an asterisk (*), all matching items will be returned:

people[*country=NZ]

You can use comparative operators:

people[*rating>=3]

Or use boolean logic:

people[* rating >= 3 & starred = true]

If options.enableRegexp is enabled, you can use the ~ operator to match RegExp:

people[*name~/^R/i]

You can also negate any of the above examples by adding a ! before the = or ~:

people[*country!=NZ]

Or syntax

person.greetingName|person.name

Deep queries

Search through multiple levels of Objects/Arrays using [**]:

 
var options = {
  url: 'http://www.json-generator.com/api/json/get/cohRDAEugi?indent=2'
};
var jsonRemoteSearch = require('json-remote-search')(options);
 
/*{
  grouped_people: {
    'friends': [
      {name: 'Steve', country: 'NZ'},
      {name: 'Jane', country: 'US'},
      {name: 'Mike', country: 'AU'},
      {name: 'Mary', country: 'NZ'}
    ],
    'enemies': [
      {name: 'Evil Steve', country: 'AU'},
      {name: 'Betty', country: 'NZ'}
    ]
  }
*/
 
var result = jsonRemoteSearch('grouped_people[**][*country=NZ]')
                .then(function(result){
                  console.log(result.value)
               })
               .catch(function(err){
                  throw err; 
               });

The result will be:

[
  {name: 'Steve', country: 'NZ'},
  {name: 'Mary', country: 'NZ'},
  {name: 'Betty', country: 'NZ'}
]

More Documentation Coming soon

License

Apache 2.0

Package Sidebar

Install

npm i json-remote-search

Weekly Downloads

3

Version

0.9.4

License

Apache-2.0

Last publish

Collaborators

  • svenkatreddy