# Class JsonB (3.7.0-rc)

3.7.0-rc 3.6.0 (latest) 3.5.0 3.4.0 3.3.0 3.2.0 2.48.0-rc 2.47.1 2.46.0 2.45.0 2.44.0 2.43.0 2.42.0 2.41.0 2.40.0 2.39.0 2.38.0 2.37.0 2.36.0 2.35.0 2.34.0 2.33.0 2.32.0 2.31.0 2.30.0 2.29.0 2.28.0 2.27.0 2.26.0 2.25.1 2.24.0 2.23.0 2.22.1 2.21.0 2.20.0 2.19.0 2.18.0 2.17.0 2.16.0 2.15.1 2.14.0 2.13.0 2.12.0 2.11.0 [`JsonB`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1JsonB) is a variant of [`Json`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Json) (see above).
While both classes share the same, thin client-side API, [`JsonB`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1JsonB) stores the data in a decomposed, binary format, whereas [`Json`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Json) stores an exact copy of the RFC 7159 text.

This means that [`JsonB`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1JsonB) is slower to input, but faster to process as it avoids reparsing. Therefore, applications that utilize the structured state of a JSON value should prefer [`JsonB`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1JsonB).

It also means that the [`JsonB`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1JsonB) stored representation does NOT preserve:

- white space,
- the order of object keys, or
- duplicate object keys.

Note: [`JsonB`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1JsonB) is only applicable to PostgreSQL databases (i.e., those created using `DatabaseDialect::POSTGRESQL`).

## Constructors

### JsonB(JsonB const \&)

Regular value type, supporting copy, assign, move.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `JsonB const &` |

### JsonB(JsonB \&\&)

Regular value type, supporting copy, assign, move.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `JsonB &&` |

### JsonB()

A null value.

### JsonB(std::string)

Construction from a JSON-formatted string.
Note that there is no check here that the argument string is indeed well-formatted. Error detection will be delayed until the value is passed to Spanner.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `s` | `std::string` |

## Operators

### operator=(JsonB const \&)

Regular value type, supporting copy, assign, move.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `JsonB const &` |

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `JsonB &` |   |

### operator=(JsonB \&\&)

Regular value type, supporting copy, assign, move.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `JsonB &&` |

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `JsonB &` |   |

### operator std::string() const \&

Conversion to a JSON-formatted string.

### operator std::string() \&\&

Conversion to a JSON-formatted string.