https://github.com/udamir/json-crawl
This package provides utility functions for crawling/cloning json objects like a tree
https://github.com/udamir/json-crawl
Last synced: 6 months ago
JSON representation
This package provides utility functions for crawling/cloning json objects like a tree
- Host: GitHub
- URL: https://github.com/udamir/json-crawl
- Owner: udamir
- License: mit
- Created: 2023-06-16T21:09:10.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2025-05-26T21:24:04.000Z (8 months ago)
- Last Synced: 2025-06-03T20:16:34.052Z (7 months ago)
- Language: TypeScript
- Size: 968 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# json-crawl

This package provides utility functions for crawling/cloning json objects like a tree
## Purpose
The purpose of this package is to simplify the traversal and manipulation of complex JSON objects in a tree-like structure. It provides functions that allow you to iterate over each node of a JSON object, perform custom operations, and clone objects deeply while maintaining independence between the original and cloned objects.
You can use `crawl`/`syncCrawl` to traverse a JSON object and perform custom operations, such as logging, data transformation, or validation, at each node. The hooks allow you to customize the behavior according to your specific requirements.
## Features
- **Crawling**: The `crawl`/`syncCrawl` function allows you to traverse a JSON object, performing custom operations at each node using hooks.
- **Cloning**: The `clone`/`syncClone` function creates a deep copy of a JSON object, ensuring that nested objects and arrays are also cloned.
- **Customizable Hooks**: Both `crawl` and `clone` functions accept hooks, allowing you to provide custom logic for each node during crawling or cloning. Hooks can modify values, state, rules or perform any desired operations.
- **Support for Async Hooks**: The `crawl` and `clone` functions supports asynchronous hooks, allowing you to perform asynchronous operations during crawling.
## Installation
```SH
npm install json-crawl --save
```
## Usage
### Nodejs
Crawls through a JSON object, performing custom operations at each node using the provided hooks.
```ts
import { syncClone, syncCrawl } from 'json-crawl'
const data = {
// Your JSON object
};
const hooks = [
({ value, path, key, state, rules }) => {
// Custom logic for each node
// Modify value, state, or perform any desired operations
return {
value: newValue, // updated value of current node for next crawl steps
state: newState, // updated state for next crawl step
rules: newRules // updated rules for next crawl step
exitHook, // on exit hook for current node
terminate: true, // crawl should be terminated
done: true // crawl of current node should be terminated
}
// return void - if no operations are required
},
// Array of hooks for custom operations during cloning
];
const params = {
state?: {
// Initial state object for hooks (optional)
},
rules?: {
// Crawl rules map (optional)
}
};
// deep Clone
const cloned = syncClone(data, hooks, params)
// crawl
syncCrawl(data, hooks, params)
```
## Contributing
When contributing, keep in mind that it is an objective of `json-crawl` to have no package dependencies. This may change in the future, but for now, no-dependencies.
Please run the unit tests before submitting your PR: `npm test`. Hopefully your PR includes additional unit tests to illustrate your change/modification!
## License
MIT