1# json-schema-traverse 2Traverse JSON Schema passing each schema object to callback 3 4[![Build Status](https://travis-ci.org/epoberezkin/json-schema-traverse.svg?branch=master)](https://travis-ci.org/epoberezkin/json-schema-traverse) 5[![npm version](https://badge.fury.io/js/json-schema-traverse.svg)](https://www.npmjs.com/package/json-schema-traverse) 6[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/json-schema-traverse/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/json-schema-traverse?branch=master) 7 8 9## Install 10 11``` 12npm install json-schema-traverse 13``` 14 15 16## Usage 17 18```javascript 19const traverse = require('json-schema-traverse'); 20const schema = { 21 properties: { 22 foo: {type: 'string'}, 23 bar: {type: 'integer'} 24 } 25}; 26 27traverse(schema, {cb}); 28// cb is called 3 times with: 29// 1. root schema 30// 2. {type: 'string'} 31// 3. {type: 'integer'} 32 33// Or: 34 35traverse(schema, {cb: {pre, post}}); 36// pre is called 3 times with: 37// 1. root schema 38// 2. {type: 'string'} 39// 3. {type: 'integer'} 40// 41// post is called 3 times with: 42// 1. {type: 'string'} 43// 2. {type: 'integer'} 44// 3. root schema 45 46``` 47 48Callback function `cb` is called for each schema object (not including draft-06 boolean schemas), including the root schema, in pre-order traversal. Schema references ($ref) are not resolved, they are passed as is. Alternatively, you can pass a `{pre, post}` object as `cb`, and then `pre` will be called before traversing child elements, and `post` will be called after all child elements have been traversed. 49 50Callback is passed these parameters: 51 52- _schema_: the current schema object 53- _JSON pointer_: from the root schema to the current schema object 54- _root schema_: the schema passed to `traverse` object 55- _parent JSON pointer_: from the root schema to the parent schema object (see below) 56- _parent keyword_: the keyword inside which this schema appears (e.g. `properties`, `anyOf`, etc.) 57- _parent schema_: not necessarily parent object/array; in the example above the parent schema for `{type: 'string'}` is the root schema 58- _index/property_: index or property name in the array/object containing multiple schemas; in the example above for `{type: 'string'}` the property name is `'foo'` 59 60 61## Traverse objects in all unknown keywords 62 63```javascript 64const traverse = require('json-schema-traverse'); 65const schema = { 66 mySchema: { 67 minimum: 1, 68 maximum: 2 69 } 70}; 71 72traverse(schema, {allKeys: true, cb}); 73// cb is called 2 times with: 74// 1. root schema 75// 2. mySchema 76``` 77 78Without option `allKeys: true` callback will be called only with root schema. 79 80 81## License 82 83[MIT](https://github.com/epoberezkin/json-schema-traverse/blob/master/LICENSE) 84