# Json Node
A way to work with JSON as a node tree.
## Installation
Navigate to your project folder and run:
```
cargo add json-node
```
Now you're set
## Usage
Use the `JsonNode` type to parse your JSON into nodes. There are three types of nodes: `Object`, `Array` and `JsonValue`. A `Value` can have several different types of values: `String`, `Integer`, `Float`, `Boolean`, `Null`. These are all modeled with enums to ensure type safety, even when a `Array` contains different types of `Value`s.
After parsing you can dig for what you need manually using the `match` statement or `if let` as you would with enums normally. Or you can iterate through every value under a node by calling `into_iter()`.
```rust
use json_node::{JsonNode, JsonValueType};
let json = "[1, 2, 3, 4, 5]";
let tree = JsonNode::parse(json).unwrap();
match tree {
JsonNode::Array(arr) => {
for element in arr.iter() {
println!("{:?}", element);
}
}
_ => println!("Expected node to be an Array.")
}
```
OR
```rust
use json_node::{JsonNode, JsonValueType};
let json = "[1, 2, 3, 4, 5]";
let tree = JsonNode::parse(json).unwrap();
for value in tree.into_iter() {
match value {
JsonNode::Value(value) => {
match value {
JsonValueType::Integer(num) => println!("{num}");
_ => println!("Expected integer value.")
}
}
_ => println!("Expected value.")
}
}
```
They both output:
```
1
2
3
4
5
```
You can also use this API to build a JSON string from nodes if needed. Although it won't be nicely formatted.
## Develop
If you want to help develop this crate, clone the repo:
```
git clone https://github.com/Skyppex/json-node.git
```
## Pull Requests
PRs are welcome :D