---
page_title: jsonencode - Functions - Configuration Language
description: The jsonencode function encodes a given value as a JSON string.
---

# `jsonencode` Function

`jsonencode` encodes a given value to a string using JSON syntax.

The JSON encoding is defined in [RFC 7159](https://tools.ietf.org/html/rfc7159).

This function maps
[Terraform language values](/terraform/language/expressions/types)
to JSON values in the following way:

| Terraform type | JSON type |
| -------------- | --------- |
| `string`       | String    |
| `number`       | Number    |
| `bool`         | Bool      |
| `list(...)`    | Array     |
| `set(...)`     | Array     |
| `tuple(...)`   | Array     |
| `map(...)`     | Object    |
| `object(...)`  | Object    |
| Null value     | `null`    |

Since the JSON format cannot fully represent all of the Terraform language
types, passing the `jsonencode` result to `jsondecode` will not produce an
identical value, but the automatic type conversion rules mean that this is
rarely a problem in practice.

When encoding strings, this function escapes some characters using
Unicode escape sequences: replacing `<`, `>`, `&`, `U+2028`, and `U+2029` with
`\u003c`, `\u003e`, `\u0026`, `\u2028`, and `\u2029`. This is to preserve
compatibility with Terraform 0.11 behavior.

The `jsonencode` command outputs a minified representation of the input.

## Examples

```
> jsonencode({"hello"="world"})
{"hello":"world"}
```

## Related Functions

* [`jsondecode`](/terraform/language/functions/jsondecode) performs the opposite operation, _decoding_
  a JSON string to obtain its represented value.
