# `Predicator.Functions.JSONFunctions`
[🔗](https://github.com/riddler/predicator-ex/blob/v9.4.1/lib/predicator/functions/json_functions.ex#L1)

JSON manipulation functions for Predicator expressions.

Provides SCXML-compatible JSON functions for serializing and parsing data.

## Available Functions

- `JSON.stringify(value)` - Converts a value to a JSON string
- `JSON.parse(string)` - Parses a JSON string into a value

## Examples

    iex> {:ok, result} = Predicator.evaluate("JSON.stringify(user)",
    ...>   %{"user" => %{"name" => "John", "age" => 30}},
    ...>   providers: [Predicator.Functions.JSONFunctions])
    iex> result
    ~s({"age":30,"name":"John"})

    iex> {:ok, result} = Predicator.evaluate("JSON.parse(data)",
    ...>   %{"data" => ~s({"status":"ok"})},
    ...>   providers: [Predicator.Functions.JSONFunctions])
    iex> result
    %{"status" => "ok"}

# `function_result`

```elixir
@type function_result() :: {:ok, Predicator.Types.value()} | {:error, binary()}
```

# `call_parse`

```elixir
@spec call_parse([Predicator.Types.value()], Predicator.Context.t()) ::
  function_result()
```

Parses a JSON string into a value.

# `call_stringify`

```elixir
@spec call_stringify([Predicator.Types.value()], Predicator.Context.t()) ::
  function_result()
```

Converts a value to a JSON string.

# `functions`

```elixir
@spec functions() :: %{
  required(Predicator.FunctionProvider.name()) =&gt;
    Predicator.FunctionProvider.entry()
}
```

Returns all JSON functions as a `Predicator.FunctionProvider` map.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
