# json

Serialize simple data as JSON text.

!!!danger Trusted input only
`json.loads()` evaluates its input as a Python expression in the `json`
module. It can execute code and is not a strict JSON parser. Do not pass
untrusted input to it.
!!!

| Function | Behavior |
| --- | --- |
| `loads(text: str)` | Evaluate text and return a Python value. JSON names `null`, `true`, and `false` are available. |
| `dumps(obj, indent=0)` | Return a string; a positive integer indent enables multiline formatting. |

Supported output values are `None`, booleans, integers, floats, strings, lists,
tuples, and dictionaries with **string keys**. Tuples become JSON arrays and
load as lists. Unsupported values raise `TypeError`. Keep containers acyclic.

```python
import json

settings = {'name': 'Ada', 'lives': 3, 'sound': True}
text = json.dumps(settings, indent=2)
assert json.loads(text) == settings
assert json.loads('{"value": null}') == {'value': None}
```

This API does not provide file-based `load`/`dump`, custom encoders,
`object_hook`, `sort_keys`, or the full CPython option set.
Non-finite floats are emitted as `NaN` or `Infinity`, which are outside
strict JSON.

For external data, bind a dedicated JSON parser in the host. A host may replace
`json.loads` and `json.dumps` using [C binding helpers](../bindings.md);
preserve the intended signatures and error reporting.

Implementation: [json.c](https://github.com/pocketpy/pocketpy/blob/main/src/modules/json.c).
