Name: jsonref
Owner: Vivocha
Description: A simple Javascript library implementing the JSON Reference and the JSON Pointer specifications.
Created: 2016-03-14 14:44:02.0
Updated: 2017-08-29 08:54:36.0
Pushed: 2017-10-12 14:47:56.0
Size: 71
Language: JavaScript
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
A simple Javascript library implementing the JSON Reference and the JSON Pointer specifications.
m install jsonref
dataOrUri
, the data to parse or a fully qualified URI to pass to retriever
to download the dataoptions
(optional), parsing options, the following optional properties are supported:scope
, the current resolution scope (base href) of URLs and paths.store
, an object to use to cache resolved id
and $ref
values. If no store is passed,
one is automatically created. Pass a store
if you are going to parse several objects or URIs referencing
the same id
and $ref
values.retriever
, a function accepting a URL in input and returning a promise resolved to an object
representing the data downloaded for the URI. Whenever a $ref
to a new URI is found, if the URI is not
already cached in the store in use, it'll be fetched using this retriever
. If not retriever
is passed
and a URI needs to be downloaded, a no_retriever
exception is thrown.The function returns a Promise resolving to the parsed data, with all $ref
instances resolved.
retriever
using fetch
tion retriever(url) {
r opts = {
method: 'GET',
credentials: 'include'
turn fetch(url, opts).then(function(response) {
return response.json();
;
retriever
using request
request = require('request');
tion retriever(url) {
turn new Promise(function(resolve, reject) {
request({
url: url,
method: 'GET',
json: true
}, function(err, response, data) {
if (err) {
reject(err);
} else if (response.statusCode !== 200) {
reject(response.statusCode);
} else {
resolve(data);
}
});
;
data
, the object to transverse using JSON Pointer.path
, either a string (#/prop1/prop2
) or an array of path components ([ "#", "prop1", "prop2" ]
or [ "prop1", "prop2" ]
).value
, optional, value to set at path
. All missing intermediate path levels are created as well.Returns the data requested or sets a new value at the specified path
jsonref = require('jsonref');
schema = {
d": "http://my.site/myschema#",
efinitions": {
"schema1": {
"id": "schema1",
"type": "integer"
},
"schema2": {
"type": "array",
"items": { "$ref": "schema1" }
}
ref.parse(schema).then(function(result) {
nsole.log(JSON.stringify(result, null, 2));
The output is:
d": "http://my.site/myschema#",
efinitions": {
"schema1": {
"id": "schema1",
"type": "integer"
},
"schema2": {
"type": "array",
"items": {
"id": "schema1",
"type": "integer"
}
}
jsonref = require('jsonref');
schema = {
llOf": [
{ "$ref": "http://json-schema.org/draft-04/schema#" },
{
"type": "object",
"properties": {
"documentation": {
"type": "string"
}
}
}
ref.parse(schema, {
triever: retriever
hen(function(result) {
nsole.log(JSON.stringify(result, null, 2));
The library will call retriever("http://json-schema.org/draft-04/schema#")
to download the external
reference. If no retriever
is passed, the returned value is a rejected Promise, with a no_retriever
exception.
jsonref = require('jsonref');
store = {};
schema = {
d": "http://my.site/myschema#",
efinitions": {
"schema1": {
"id": "schema1",
"type": "integer"
},
"schema2": {
"type": "array",
"items": { "$ref": "schema1" }
}
ref.parse(schema, {
ore: store
hen(function(result) {
nsole.log(JSON.stringify(result, null, 2));
After parsing, the contents of the store are:
ttp://my.site/myschema#": {
"id": "http://my.site/myschema#",
"definitions": {
"schema1": {
"id": "schema1",
"type": "integer"
},
"schema2": {
"type": "array",
"items": {
"id": "schema1",
"type": "integer"
}
}
}
ttp://my.site/schema1#": {
"id": "schema1",
"type": "integer"